2018년 11월 24일 토요일

Gradle 의존성 옵션 & api 와 implementation 차이점

의존성 옵션


Gradle 프로젝트는 여러 모듈을 포함할 수 있고 하나의 모듈은 다른 모듈을 의존할 수 있다
그리고 의존하고 있는 모듈이 또다른 모듈을 의존할 수 있다

모듈이 커지면 빌드 시간이 오래 걸리고 여러 모듈이 많이 얽혀 있을 수록 빌드 시간이 오래 걸린다


compile 옵션 사용시 warning 문구

Gradle 3.0 부터 의존 라이브러리 수정 시 재빌드가 필요한 라이브러리를 선택적으로 할 수 있도록 compile 대신 api 와 implementation 으로 나눠 필요없는 경우 재빌드 하지 않도록 함

Gradle 버전 호환을 위해 compile 은 api 와 동일한 동작을 함
  • 2018년 까지만 지원할 것으로 보임

api 와 implementation 차이점



참고

차이점
  • 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 시에만 빌드하고 빌드 결과물에는 포함하지 않음
  • runtimeOnly: runtime 시에만 필요한 라이브러리인 경우
  • annotationProcessor: annotation processor 명시 (gradle 4.6)

특정 build flavor 에서만 동작


예) 무료 버전 빌드라는 의미로 free 라는 flavor 를 미리 작성한 경우
freeImplementation 으로 지정하면 free flavor 일때만 의존성 빌드

testImplementation 은 test 시에만 의존되며 본 모듈을 의존하는 다른 모듈은 빌드에 영향이 없게 함


계속해서 warning 이 뜨는 경우


자신의 프로젝트에 모든 compile 옵션을 제거했는데도 warning 이 뜨는 경우
종속 라이브러리 버전을 올리면 warning 이 사라질 수 있음

참고:


결론


주로 외부 라이브러리를 사용하는 경우 api 나 implementation 나 별 차이 없을 것으로 보임


댓글 없음:

댓글 쓰기