Gradle 라이브러리 의존성 설정
아래 그래프는 Gradle에서 라이브러리 구성을 설정하는 방법을 설명한다.

- 녹색 : 라이브러리의 의존성을 선언할 때 사용하는 설정
- 분홍색 : 라이브러리를 컴파일하거나 실행할 때 사용하는 설정
- 파란색 : 라이브러리 자체에서 사용하는 설정
Configuration name | Description | |
api | 컴파일 및 런타임 시 필요한 의존성 선언(사용자에게 의존성 노출) | |
implementation | 컴파일 및 런타임 시 필요한 의존성 선언(런타임 시에만 사용자에게 의존성 노출) | |
compileOnly | 컴파일 시에만 필요한 의존성 선언 | |
compileOnlyApi | 사용자의 모듈을 컴파일 할때 필요한 의존성 선언 | |
runtimeOnly | 런타임 시에만 필요한 의존성 선언 | |
apiElements | 해당 라이브러리를 컴파일하는 데 필요한 모든 요소를 검색할 때 사용 (default 설정과 다르게, implemenation이나 runtime 의존성에 대한 정보를 노출하지 않음) |
|
runtimeElements | 해당 라이브러리를 실행하는 데 필요한 모든 요소를 검색할 때 사용 | |
compileClasspath | 라이브러리의 컴파일 클래스 경로를 지정(자바 컴파일러를 호출할 때 사용) | |
runtimeClasspath | 라이브러리의 런타임 클래스 경로 지정 |
api vs impelmentation
- api: 의존 라이브러리 수정시 해당 모듈을 의존하고 있는 모듈들 또한 재빌드
- A(api) <- B <- C 일 때, C 에서 A 를 접근할 수 있음
- A 수정시 B 와 C 모두 재빌드
- implementaion: 의존 라이브러리 수정시 본 모듈까지만 재빌드
- A(implementation) <- B <- C 일 때, C 에서 A 를 접근할 수 없음
- A 수정시 B 까지만 재빌드
참고자료
- https://docs.gradle.org/current/userguide/java_library_plugin.html
The Java Library Plugin
The Java Library plugin expands the capabilities of the Java plugin by providing specific knowledge about Java libraries. In particular, a Java library exposes an API to consumers (i.e., other projects using the Java or the Java Library plugin). All the so
docs.gradle.org
- https://twinparadox.tistory.com/630
Gradle의 라이브러리 의존성 옵션 정리
익숙함 문득 웹 프로젝트 관련 내용들을 정리해나가면서, gradle 파일을 보니까 다음과 같은 부분이 눈에 들어왔다. dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' imp..
twinparadox.tistory.com
- https://jongmin92.github.io/2019/05/09/Gradle/gradle-api-vs-implementation/
(Gradle dependency) api와 implementation 차이
build script의 dependencies 블록에 여러 가지 다양한 종속성 구성(api, implementation, compileOnly, runtimeOnly, annotationProcessor)을 사용하여 라이브러리 종속성을 선언할 수 있습니다. 다양한 종속성 구성 중 api
jongmin92.github.io