일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- AWS
- SWiFT
- switch-case
- Gradle
- 함수
- programmers
- amazon
- Spring
- 전의 의존성
- 클래스
- CodeIgniter
- Java
- PHP
- pagination
- 제어문
- 객체
- EC2
- 사용법
- bootstrap
- CKEditor4
- class
- 차이점
- DatePicker
- Xcode
- 2차원 객체배열
- 옵셔널
- 자료불러오기
- 상속
- guard
- jQuery
- Today
- Total
not bad 한 개발
[Spring] Gradle Dependency 설정 본문
공부하다가 dependencies를 쓰는데 implementation, compileOnly등의 속성이 있는데 어떤의미 인지 문득 궁금해져서 기록해봅니다.
그래서 공식사이트에서 찾아봤는데 위의 두 개의 속성의 뜻을 알기전에 runtimeClasspath가 무엇인지 compileClasspath가 무엇인지를 알아야 했습니다, (그런데 공식문서 보니까 속성이 많아서 영혼털렸습니다.)
Gradle Dependency Configuration

- 초록색 : 사용자가 의존성을 선언할 때 사용합니다.
- 분홍색 : 구성요소가 라이브러리를 컴파일하거나 실행할 때 사용합니다.
- 파란색 : 구성요소 자체를 사용하기 위해 구성 요소 내부에서 사용합니다.
(초록색을 이해하기전에 분홍색과 파란색을 먼저 알필요가 있다.)
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 속성입니다.
annotationProcessor
- annotation processor를 명시하기 위해 사용
여기까지가 gradle Dependency 설정의 대략적인 설명입니다, 그런데 정리를 하다가 전의 의존성(transitive dependency) 을 보게되었습니다, 그래서 정리를 하자면 아래의 그림처럼 표현할 수 있습니다.

A, B,C 프로젝트가 있는데 A가 B를 의존하고 있고, B가 C를 의존하고 있을 때 C도 A를 의존하고있는 것이 전의 의존성이고 implementation과 api는 이러한 전의 의존성을 허용하냐 안하냐로 나눌수도 있습니다.
api와 implementation 속성의 차이점을 보다 자세하게 나타내자면 아래의 그림으로 나타낼 수 있습니다.

참고 게시글
https://twinparadox.tistory.com/630
Gradle의 라이브러리 의존성 옵션 정리
익숙함 문득 웹 프로젝트 관련 내용들을 정리해나가면서, gradle 파일을 보니까 다음과 같은 부분이 눈에 들어왔다. dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'or
twinparadox.tistory.com
https://mangkyu.tistory.com/296
[Gradle] Gradle Java 플러그인과 implementation와 api의 차이
이번에는 Gradle(그레이들)이 제공하는 Java 플러그인과 implementation와 api의 차이에 대해 알아보도록 하겠습니다. 1. Gradle Java 플러그인, Java-Library 플러그인 [ Java 플러그인이란? ] Gradle(그레이들)에서
mangkyu.tistory.com
'Web > Spring' 카테고리의 다른 글
[Spring] DAO , Repository에 대하여 (2) | 2024.10.27 |
---|---|
[Spring] DTO, VO, Entity 특징 및 차이점 (2) | 2024.10.27 |
[Spring] API 개발 및 연구 - 초기 세팅 선정 이유 (0) | 2024.10.25 |
[Spring] API 개발 및 연구 - 초기 세팅 (2024.09.28) (2) | 2024.10.25 |
[Spring] Gradle이란? (2) | 2024.10.25 |