728x90
일단 optional, provided 의 의미를 정확히 알고 넘어갈 필요가 있다. 매번 헷갈린다... 일단 사용은 아래와 같이 하면 된다.
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-dbcp</artifactId>
<optional>true</optional>
<scope>provided</scope>
</dependency>
optional true 설정이든 scope provided 설정이든 해당 의존성을 어떠한 과정에서 제외한다는 것은 동일한데 분명한 차이가 있다.
optional true 에 대해 먼저 설명하면 기본적으로 A.jar 안에 junit 의존성이 포함되어 있고 어떠한 프로젝트에서 A.jar 의존성을 추가했다면 해당 프로젝트에서는 별도로 추가히지 않아도 junit 의존성이 추가된다. 의존성이 상속된다고 볼 수 있다. 그런데 A.jar 안에서 junit 의존성 정의시 위와 같이 optional true 를 추가했다면 의존성이 상속되지 않는다.
scope provided 는 해당 의존성이 컴파일시에만 사용되고 실제 deploy 에는 포함되지 않게 하는 설정이다. 예를 들어 컨테이너에 포함된 의존성들은 굳이 패키징에 포함하지 않아도 컨테이너에 의존성이 있으니 이런 설정을 한다.
그렇다면 이러한 기능을 gradle 에서는 어떻게 설정할까? Gradle 6.8.3 기준 scope provided 는 그냥 compileOnly로 대체할 수 있고 optional true 는 플러그인이 추가로 필요하다. 즉, 아래와 같이 사용하면 된다.
plugins {
...중략...
id "nebula.optional-base" version "2.2.2"
}
...중략...
dependencies {
compileOnly("org.apache.tomcat:tomcat-dbcp", optional)
}
728x90
'Base > CI, CD' 카테고리의 다른 글
Nexus와 Maven Central (2) | 2021.05.21 |
---|---|
maven 인코딩 설정 (0) | 2021.05.18 |
maven 커멘트 옵션 정리 (0) | 2021.04.23 |
Gradle api, implements 차이 (0) | 2021.04.19 |
Gradle 의존성 버전 관리 (0) | 2021.04.07 |