자바 라이브러리 생성-테스트를 위해 Gradle 종속성을 추가하되 컴파일 된 라이브러리에 포함시키지 마십시오 (또는 재정의 가능하게 만드십시오).

Michał Klimczak

Android 프로젝트가 있고 구성 요소 중 하나를 라이브러리로 만들 계획입니다. Android 종속성이 필요하지 않으므로 이것은 Java 라이브러리 (jar)입니다.

문제는이 라이브러리가 RxJava에 의존한다는 것입니다. 그러나 라이브러리 클라이언트 가 사용할 RxJava 버전에 종속되기를 원 하며 라이브러리의 build.gradle.

Gradle Default 종속성 이 갈 길이 라고 생각 했지만 RxJava 종속성을 전혀 제공하지 않으며 라이브러리 모듈이 빌드되지 않습니다.

build.gradle:

apply plugin: 'java'

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
}

configurations.all {
    pluginTool {
        defaultDependencies { dependencies ->
            dependencies.add(this.project.dependencies.create("io.reactivex:rxjava:1.1.0"))
        }
    }
}

sourceCompatibility = "1.7"
targetCompatibility = "1.7"
Nandsito

문제는이 라이브러리가 RxJava에 의존한다는 것입니다. 그러나 라이브러리 클라이언트 가 사용할 RxJava 버전에 종속되기를 원 하며 라이브러리의 build.gradle.

종속성이 작동하는 방식이 아니기 때문에 가능한지 모르겠습니다. Maven Transitive Dependencies 는이 문제를 약간 설명합니다.

예를 들어, 라이브러리를 만들고 주어진 RxJava 버전을 사용했습니다 vn. 그것은 암시 적으로 당신의 lib가 vn존재하지 않는 일부 기능을 사용 vn-1하고 바라건대 vn+1나중에 더 이상 사용되지 않을 것임을 의미 합니다. lib 클라이언트가 RxJava 버전을 선택할 수 있다면 임의로 선택할 수 vn-1있으며 코드가 작동하지 않습니다. 당신은 의존도가 vn높고 당신의 라이브러리를 사용하는 사람은 누구나 그것을 알고 있어야합니다.

lib에 명시 적 종속성을 제공하는 데 문제가 없습니다 build.gradle. 실제로 종속성을 나열하면 Gradle이 종속성 그래프를 해결하고 충돌 및 모든 것을 처리하는 데 도움이됩니다. Gradle이 수행하는 작업은 다음과 같습니다. https://docs.gradle.org/current/dsl/org.gradle.api.artifacts.ResolutionStrategy.html

마지막으로 lib 클라이언트에 대한 종속성 위임을 수행하는 방법을 찾았더라도 런타임 중에 애플리케이션이 충돌 할 수 있습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관