Base/CI, CD

Gradle api, implements 차이

findmypiece 2021. 4. 19. 15:29
728x90

차이는 하위 모듈에 해당 의존성이 상속되느냐 마느냐 이다.

 

예를 들어 아래와 같이 멀티 프로젝트를 구성한다고 가정해보자.

common

api

batch

 

여기에서 common 은 공통모듈이고

api, batch 에서 공통으로 사용할 코드가 포함되어 있다.

이에 api, batch build.gradle 에서는 아래와 같이 common 을 참조하고 있을 것이다.

 

dependencies {
    implementation project(":common")
    
    ...
}

 

common에 아래와 같은 의존성을 정의한다고 가정해보자.

implementation "com.google.guava:guava"

 

이 경우 api, batch 에 guava 의존성이 상속되지 않기 때문에

필요하다면 각각 다시 의존성을 정의해야 한다.

 

하지만 아래와 같이 한다면 의존성이 상속되기 때문에

api, batch 에서는 별다른 의존성 설정없이 guava를 사용할 수 있다.

api "com.google.guava:guava"

 

일반적으로 implements를 많이 사용한다.

과도한 의존성 상속을 막아주고 꼭 필요한 의존성만 명시적으로 사용할 수 있게 해주기 때문이다.

 

추가로 api 지시어를 사용하려면 아래 플러그인이 필수로 필요하다.

plugins {
    id 'java-library'
}
728x90