일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 상속
- CodeIgniter
- amazon
- 함수
- switch-case
- pagination
- programmers
- 2차원 객체배열
- 옵셔널
- DatePicker
- Java
- 자료불러오기
- CKEditor4
- Xcode
- PHP
- Gradle
- bootstrap
- guard
- Spring
- EC2
- jQuery
- class
- SWiFT
- 클래스
- 객체
- 사용법
- 차이점
- 제어문
- 전의 의존성
- AWS
Archives
- 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
https://mangkyu.tistory.com/296
'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 |
Comments