의존성 옵션
Gradle 프로젝트는 여러 모듈을 포함할 수 있고 하나의 모듈은 다른 모듈을 의존할 수 있다
그리고 의존하고 있는 모듈이 또다른 모듈을 의존할 수 있다
모듈이 커지면 빌드 시간이 오래 걸리고 여러 모듈이 많이 얽혀 있을 수록 빌드 시간이 오래 걸린다
compile 옵션 사용시 warning 문구 |
Gradle 3.0 부터 의존 라이브러리 수정 시 재빌드가 필요한 라이브러리를 선택적으로 할 수 있도록 compile 대신 api 와 implementation 으로 나눠 필요없는 경우 재빌드 하지 않도록 함
Gradle 버전 호환을 위해 compile 은 api 와 동일한 동작을 함
- 2018년 까지만 지원할 것으로 보임
api 와 implementation 차이점
참고
- https://medium.com/mindorks/implementation-vs-api-in-gradle-3-0-494c817a6fa
- https://stackoverflow.com/a/44419574/5676460
차이점
- api: 의존 라이브러리 수정시 본 모듈을 의존하고 있는 모듈들 또한 재빌드
- A(api) <- B <- C 의 경우 C 에서 A 를 접근할 수 있음
- A 수정시 B 와 C 모두 재빌드
- implementaion: 의존 라이브러리 수정시 본 모듈까지만 재빌드
- A(implementation) <- B <- C 의 경우 C 에서 A 를 접근할 수 없음
- A 수정시 B 까지 재빌드
의존성 옵션들
- implementation: 의존 라이브러리 수정시 본 모듈까지만 재빌드
- 본 모듈을 의존하는 모듈은 해당 라이브러리의 api 를 사용할 수 없음
- api: 의존 라이브러리 수정시 본 모듈을 의존하는 모듈들도 재빌드
- 본 모듈을 의존하는 모듈들도 해당 라이브러리의 api 를 사용할 수 있음
- compileOnly: compile 시에만 빌드하고 빌드 결과물에는 포함하지 않음
- runtime 시 필요없는 라이브러리인 경우 (runtime 환경에 이미 라이브러리가 제공되고 있는가 하는 등의 경우)
- 참고: https://blog.gradle.org/introducing-compile-only-dependencies
- runtimeOnly: runtime 시에만 필요한 라이브러리인 경우
- annotationProcessor: annotation processor 명시 (gradle 4.6)
- 참고:
- https://docs.gradle.org/4.6/release-notes.html
- https://blog.gradle.org/incremental-compiler-avoidance#about-annotation-processors
- Annotation processing 이 필요없다고 예측되는 경우 빌드 제외
특정 build flavor 에서만 동작
예) 무료 버전 빌드라는 의미로 free 라는 flavor 를 미리 작성한 경우
freeImplementation 으로 지정하면 free flavor 일때만 의존성 빌드
testImplementation 은 test 시에만 의존되며 본 모듈을 의존하는 다른 모듈은 빌드에 영향이 없게 함
계속해서 warning 이 뜨는 경우
자신의 프로젝트에 모든 compile 옵션을 제거했는데도 warning 이 뜨는 경우
종속 라이브러리 버전을 올리면 warning 이 사라질 수 있음
참고:
결론
주로 외부 라이브러리를 사용하는 경우 api 나 implementation 나 별 차이 없을 것으로 보임
댓글 없음:
댓글 쓰기