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
'Basic > Android' 카테고리의 다른 글
Gradle tutorial 관련 사이트 (0) | 2019.09.23 |
---|---|
Android LayoutInflater 개념 및 사용 방법 (4) | 2019.09.23 |
Doxygen 사용 방법 및 환경 설정 (0) | 2019.09.16 |
안드로이드 어댑터 뷰(Adapter View) (0) | 2019.09.12 |
안드로이드 그림 그리기 기본 (0) | 2019.09.07 |