김영한님 스프링 강의를 수강하면서 build.gradle 설정을 하는데 implement와 compileOnly 등 gradle 의존성 옵션에 대해서 궁금증이 생겨서 글을 작성하게 되었습니다. 간단하게 쓴 글로 자세한 내용은 아래 첨부된 docs 및 블로그 참고하시면 됩니다.
Gradle Dependency Configuration
초록색
사용자가 의존성을 선언할 때 사용한다.
- implementation
- runtimeOnly
- compileOnly
- compileOnlyApi
- api
분홍색
구성요소가 라이브러리를 컴파일하거나 실행할 때 사용한다.
- apiElements
- 라이브러리 컴파일(compile)
- 해당 라이브러리를 컴파일하는 데 필요한 모든 요소를 검색할 때 사용한다.
- default 설정과 다르게, implementation 이나 runtime 의존성에 대한 정보를 노출하지 않는다.
- runtimeElements
- 라이브러리 실행(Runtime)
- 해당 라이브러리를 실행하는 데 필요한 모든 요소를 검색할 때 사용한다.
파란색
구성요소 자체 사용을 위해 구성요소 내부에서 사용한다.
- compileClassPath
- runtimeClassPath
Gradle Dependencies
implementation
- 의존 라이브러리 수정시 본 모듈까지만 재빌드
- 본 모듈을 의존하는 모듈은 해당 라이브러리의 api를 사용할 수 없음
- 내부적으로만 사용되고 사용자에게는 의존성을 노출시키지 않게 선언. 다만, 런타임에는 노출됨
api
- 의존 라이브러리 수정시 본 모듈의 의존하는 모듈들도 재빌드
- 본 모듈을 의존하는 모듈들도 해당 라이브러리의 api를 사용할 수 있음
compileOnly
- 컴파일 타임에 필요한 라이브러리
- compile시에만 빌드하고 빌드 결과물에는 포함하지 않음
runtimeOnly
- runtime시에만 필요한 라이브러리인 경우
annotationProcessor
- annotation processor 명시하기 위해 사용 (ex: Lombok)
testImplementation
- 테스트 코드를 수행할 때만 적용
compileOnlyApi
- 사용자가 만든 모듈에 의해 컴팡일 타임에 필요한 라이브러리
- compileOnly와 동일하게 컴파일 시에만 빌드하고 빌드 결과물에는 제외
참고
https://docs.gradle.org/current/userguide/java_library_plugin.html
https://twinparadox.tistory.com/630
'Back-End' 카테고리의 다른 글
멀티 모듈은 뭘까? (0) | 2024.04.22 |
---|---|
HTTP 상태 코드에 대해서 (1) | 2024.04.12 |
[Spring Boot] 배포 방법 (JAR vs WAR) (0) | 2024.03.21 |
[Spring] 스프링 프레임워크의 MVC 동작원리 (1) | 2024.03.11 |
[Spring] 스프링을 사용하는 이유 (0) | 2024.03.04 |