새소식

반응형
Development

[Gradle] dependencies - implementation, api

  • -
반응형

 

Gradle에서는 plugin 기능을 제공한다.

그중에서도 java, java-libray plugin은 기능은 자바 프로젝트를 빌드하는데 거의 필수적으로 필요한 plugin들이다.

    apply plugin: 'java'
    apply plugin: 'java-library'

 

java-libray는 java를 상속받은 plugin으로 java plugin이 제공하는 모든 configuration을 제공한다

추가적으로, java-libray plugin이 api configuration 제공 

 

api로 선언된 의존성은 소비자의 compile classpath와 runtime classpath 모두에 포함

implementation configuration은 내부에서 사용되는 의존성을 선언하는 데 사용

 

implementation을 사용하여 선언된 의존성은 해당 모듈 내부에서만 사용되고, 다른 모듈에 노출되지 않는다.

이로 인해 모듈 내부에서 implementation으로 선언되어 사용되는 라이브러리의 변경사항은 다른 모듈에 영향을 미치지 않는다.

-> Implemetation 사용하여 선언된 의존성은 소비자의 compile classpath에는 포함되지 않는다.

api는 의존성을 다른 모듈에 노출
implementation은 의존성을 노출하지 않음

 

 

언제 api 쓰고, 언제 implemetation 쓸까?

 

최대한 다른 모듈에 영향을 적게 주기 위해서 implementation을 사용

api - 라이브러리가 구현하는 공개 API 노출되는 의존성에 대해서 사용

 

예를들어, 공통 모듈에 api를 호출하는 기능을 작성하고 다른 모듈에서 해당 모듈의 dependecy를 추가하는 경우

( 공개 api 사용)

소비자 모듈에서는 공통 모듈의 공개 api를 사용하고, 응답값 등을 사용하면서 공통 모듈에서 사용하는 dependecy에 대한 참조가 자연스럽게 같이 이루어지게 된다. 

이러한 경우에는 소비자가 공통 모듈을 사용하는데 불편함이 없이 api를 통해서 dependency를 전파해 주어야 된다고 생각한다. 

 

https://docs.gradle.org/current/userguide/dependency_management_for_java_projects.html

 

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.