반응형

Gradle 스크립트는 JAR과 Gradle 스크립트가 동작할 때 JAR dependency를 다운로드 해준다.

 

이러한 의존성은 transitive dependency라고 불린다.

 

Gradle 스크립트는 maven central 또는 특정 저장소로부터 다운로드를 하게 된다.

 

때때로 우리는 exclude transitive dependency의 상황을 맞이하게 된다.

이때 transitive dependency는 전이 의존성을 의미한다.

 

 

 

전의 의존성이란?

 

Gradle을 통해 빌드를 하게 되고, 우리가 특정 dependency를 통해 그래들로부터 라이브러리를 받으면 해당 라이브러리는 또 다른 라이브러리를 요구하게 될 수 있다.

 

이렇게 재귀적으로 라이브러리가 라이브러리를 요구하게 되는 상황 전의 의존성이라 한다.

 

이러한 상황은 다음과 같은 경우들이 있다.

 

1. 전의 의존성이 불가능한 JAR 버전인 경우

2. 지정된 위치에서 dependency를 사용할 수 없을 때

3. dependency가 런타임 또는 컴파일/런타임에 요구되지 않을 때

 

 

 

exclude transitive dependency 예제

 

exclude transitive dependency를 위해 우리는 두가지 접근법을 제시하고자 한다.

1. configuration을 이용한 exclude transitive dependency

2. dependency을 이용한 exclude transitive dependency

 

 

exclude transitive dependency을 이해하기위해 아래에 간단한 gradle script를 보자.

 

build.gradle

apply plugin: 'java'
apply plugin: 'eclipse'
repositories {
    mavenCentral()
}
dependencies {
   compile 'org.hibernate:hibernate-core:4.3.6.Final'
} 

 

1. Exclude Transitive Dependency by Configuration

 

Excluding Transitive Dependency by Configuration는 보통 그래들을 다룰 때 선호하는 방법이다.

 

configuration을 사용하여 우리는 모듈과 그룹에 대한 transitive dependency을 배제할 수 있다.

apply plugin: 'java'
apply plugin: 'eclipse'
repositories {
    mavenCentral()
}
dependencies {
   compile 'org.hibernate:hibernate-core:4.3.6.Final'
}
configurations {
    compile.exclude module: 'dom4j'
} 

위의 스크립트를 실행하면 dom4j와 dom4j의 dependency JAR은 더이상 classpath에 없게 된다.

apply plugin: 'java'
apply plugin: 'eclipse'
repositories {
    mavenCentral()
}
dependencies {
   compile 'org.hibernate:hibernate-core:4.3.6.Final'
}
configurations {
    compile.exclude module: 'dom4j'
    compile.exclude group: 'org.jboss.logging'
} 

위의 스크립트는 module와 group 두가지에 대해 exclude를 하는 과정이다.

 

apply plugin: 'java'
apply plugin: 'eclipse'
repositories {
    mavenCentral()
}
dependencies {
   compile 'org.hibernate:hibernate-core:4.3.6.Final'
}
configurations {
    all*.exclude group: 'org.jboss.logging'
} 

위와 같은 방법으로도 transitive dependency를 exclude 할 수 있다.

 

 

2. Exclude Transitive Dependency by Dependency

 

apply plugin: 'java'
apply plugin: 'eclipse'
repositories {
    mavenCentral()
}
dependencies {
   compile ('org.hibernate:hibernate-core:4.3.6.Final') {
      exclude module: 'dom4j'
      exclude group: 'org.jboss.logging'
   }
} 

 transitive dependency를 dependencies에서도 위와 같은 방식으로 이용한다면 exclude를 할 수 있다.

 

이때 gradle script는 module 'dom4j'와 group 'org.jboss.logging' 그리고 두개의 transitive dependency를 필터링 해줄 것이다.

 

 

 

https://www.concretepage.com/build-tools/gradle/gradle-exclude-transitive-dependency-example

 

Gradle Exclude Transitive Dependency Example

Gradle Exclude Transitive Dependency Example By Arvind Rai, September 20, 2014 Gradle script downloads the JAR and the dependency JAR when gradle script run. This dependency is called transitive dependency. Gradle script downloads the JAR from maven centra

www.concretepage.com

 

 

반응형