api (= old compile keyword)
- gradle 3.0부터 deprecated된 compile을 대체!
- transitive dependency들도 consumer에게 라이브러리 노출 O
- transitive dependency들도 consumer의 classpath에 포함 O
implementation
- transitive dependency들은 consumer에게 라이브러리 노출 X
- transitive dependency들은 consumer의 classpath에 포함 X
- 그래서 노출될 필요 없는 의존성들은 api(compile)보다 implementation을 권장
api와 implementation 예시
api : 의존 라이브러리 수정 시, 해당 라이브러리를 포함하게 되는 모든 모듈 recompile
implementation : 의존 라이브러리 수정 시, 이를 포함한 라이브러리까지만 recompile
Ex. api
- 라이브러리 B에서 라이브러리 D를 의존성으로 추가
- app module에서 라이브러리 B를 의존성으로 추가
- 두 라이브러리 모두 app module에서 접근가능 (classpath에 포함되기 때문)
- 라이브러리 D 수정 시, D / B / app 모두 리컴파일 필요
- 라이브러리 D를 포함하고 있는, 라이브러리 B를 추가한 모듈들 모두 recompile
Ex. implementation
- 라이브러리 A에서 라이브러리 C를 의존성으로 추가
- app module에서 라이브러리 A를 의존성으로 추가
- app module에선 라이브러리 A만 접근가능
- 라이브러리 C가 수정 시, C를 의존성으로 추가한 A까지만 리컴파일하면 됨
참고
https://tjandroid.blogspot.com/2018/11/api-implementation.html
https://jongmin92.github.io/2019/05/09/Gradle/gradle-api-vs-implementation/
'학습 > Gradle' 카테고리의 다른 글
[gradle] gradle 5부터 lombok의 설정을 신경써야 한다 (1) | 2020.06.14 |
---|---|
[gradle] buildscript block의 용도 (0) | 2020.03.23 |
댓글