아래 그래프는 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
- https://twinparadox.tistory.com/630
- https://jongmin92.github.io/2019/05/09/Gradle/gradle-api-vs-implementation/
'Spring' 카테고리의 다른 글
Gradle vs Maven (0) | 2022.05.11 |
---|---|
Spring Boot 자동 환경설정 Annotation (0) | 2022.05.11 |