[Gradle] Dependency 설정

LDB·2024년 10월 30일
0

gradle

목록 보기
2/2
post-thumbnail

자~ 이제 시작이야~~~

공부하다가 dependencies를 쓰는데 implementation, compileOnly등의 속성이 있는데 어떤의미 인지 문득 궁금해져서 기록한다.

그래서 공식사이트에서 찾아봤는데 위의 두 개의 속성의 뜻을 알기전에 runtimeClasspath가 무엇인지 compileClasspath가 무엇인지 부터 알아야 했다, 그런데 공식문서 보니까 뭐가 더럽게 많아서 탈탈털렸다.


Gradle Dependency Configuration


(The Java Library plugin configurations)

  • 초록색 : 사용자가 의존성을 선언할 때 사용.
  • 분홍색 : 구성요소가 라이브러리를 컴파일하거나 실행할 때 사용.
  • 파란색 : 구성요소 자체를 사용하기 위해 구성 요소 내부에서 사용.

(초록색을 이해하기전에 분홍색과 파란색을 먼저 알필요가 있다.)

(분홍색) apiElements

  • 라이브러리의 컴파일(Compile)의미
  • 해당 라이브러리를 컴파일하는 데 필요한 모든 요소를 검색할 때 사용한다.
  • default 설정과 다르게, implemenation이나 runtime 의존성에 대한 정보를 노출하지 않는다.

(분홍색) runtimeElements

  • 라이브러리의 실행(Runtime)의미
  • 해당 라이브러리를 실행하는 데 필요한 모든 요소를 검색할 때 사용한다.


(파란색) compileClasspath

  • 프로젝트 컴파일에 필요한 모든 클래스 파일과 라이브러리들을 포함
  • 프로젝트가 컴파일 시간에만 포함
  • 빌드결과물에 포함되지 않는다.

(파란색) runtimeClasspath

  • 프로젝트 실행에 필요한 모든 클래스 파일과 라이브러리들을 포함
  • 프로젝트가 실행될 때에만 포함
  • 빌드결과물에 포함.
  • 일반적으로 compileClasspath에는 runtimeClasspath에 포함되는 대부분의 의존성이 포함

(초록색) impementation

  • 전의 의존성(transitive dependency) 을 허가하지 않는다.
  • 내부적으로만 사용되고 사용자에게는 의존성을 노출시키지 않게 선언한다.
  • 의존 라이브러리를 수정해도 본 모듈까지만 재빌드한다.

(초록색) api

  • 전의 의존성(transitive dependency) 을 허가한다.
  • 컴파일 타임과 런타임에 사용자에게 의존성을 노출시킨다.
  • 의존 라이브러리가 수정되는 경우 본 모듈을 의존하는 모든 모듈들을 재빌드한다.

(초록색) compileOnly

  • 컴파일 시점에 필요한 라이브러리
  • 컴파일 시에만 빌드하고 빌드 결과물에는 포함하지 않는다.
  • 대표적으로 Lombok dependency가 compileOnly 속성이다.

(초록색) compileOnlyApi

  • 사용자가 만든 모듈에 의해 컴파일 타임에 필요한 라이브러리.
  • compileOnly와 동일하게 컴파일 시에만 빌드하고 빌드 결과물에는 제외.

(초록색) runtimeOnly

  • 런타임 시점에만 필요한 라이브러리.
  • 대표적으로 DB관련 dependency가 runtimeOnly 속성이다.

전의 의존성(transitive dependency)

여기까지가 gradle Dependency 설정의 대략적인 내용이다. 그런데 정리를 하다가 전의 의존성(transitive dependency) 을 보게되었는데 그래서 정리를 하자면 아래의 그림처럼 표현할 수 있겠다.

설명하자면 A, B,C 프로젝트가 있는데 A가 B를 의존하고 있고, B가 C를 의존하고 있을 때 C도 A를 의존하고있는 것이 전의 의존성이고 implementation과 api는 이러한 전의 의존성을 허용하냐 안하냐로 나눌수 있다.

api와 implementation 속성의 차이점을 보다 자세하게 나타내자면 아래의 그림으로 나타낼 수 있다.

참고 게시글

https://twinparadox.tistory.com/630

https://mangkyu.tistory.com/296

profile
가끔은 정신줄 놓고 멍 때리는 것도 필요하다.

0개의 댓글