Programming

Gradle에서 transitive = true는 정확히 무엇입니까 (wrt crashlytics)?

procodes 2020. 6. 3. 23:04
반응형

Gradle에서 transitive = true는 정확히 무엇입니까 (wrt crashlytics)?


Gradle transitive = true은 정확히 무엇을합니까? Gradle 문서 에서 명확하지 않습니다 . 이것은 compilewithin 의 맥락에 있습니다 build.gradle. 내 경우에는 안드로이드의 crashlytics에 의존하고 있습니다.

compile('com.crashlytics.sdk.android:crashlytics:2.2.2@aar') {
    transitive = true;
}

여러 Gradle 문서 ( herehere )는 "전이"가 기본값으로 true임을 나타냅니다. 그러나 제거 transitive = true하면 전이 의존성이 가져 오지 않습니다 (특히 KitGroup).

class file for io.fabric.sdk.android.KitGroup not found

문서는 기본값이 true라고 말하지만 실제 동작은 반대입니다.

Gradle 2.2.1을 실행 중입니다. 아마도 동작이 2.2와 2.4 사이에서 변경 되었습니까?

편집 : gradle을 사용하여 aar 라이브러리에 대해 관련 전이 종속성이 해결되지 않음


@aar표기법을 사용하고 있습니다.
즉, aar 아티팩트 만 다운로드하고 종속성은 다운로드하지 않으려는 것입니다.
문서 부분을 ​​확인할 수 있습니다 : 섹션을
확인 1.4.1.2. Artifact only notation하십시오.

이슈 전용 표기법은 지정된 확장자를 가진 이슈 파일 만 다운로드하는 모듈 종속성을 만듭니다. 기존 모듈 설명자는 무시 됩니다.

@aar종속성을 다운로드 하려면 표기법을 사용 하여을 추가해야합니다 transitive=true.

@aar를 생략하면 전이 속성을 추가하지 않고 작동해야합니다.


보다 일반적인 메모에서 : 설정 transitive = false상의 crashlytics라이브러리 원인에 필요한 모든 라이브러리 무시 Gradle을 crashlytics(= "과도 라이브러리")을 다운로드하고이를 연결하지.

필요한 라이브러리를 프로젝트에 수동으로 추가하거나 다른 종속성에 의해 추가 된 다른 임시 라이브러리에 의존해야합니다.

gradle의 기본값은 transitive = true입니다.

여기에 예와 전체 설명 : http://www.devsbedevin.net/android-understanding-gradle-dependencies-and-resolving-conflicts/


내 생각에 수동으로 참조하는 Crashlytics 아티팩트는 종속성을 전 이적 이지 않은 것으로 지정 transitive=false하여 기본적으로 이러한 종속성을 가져 오지 않아도됩니다. 이것이 바로 당신이 반대 행동을하는 이유입니다. 예를 들어 일부 개발자는 모든 Google Play 서비스 또는 Crashlytics가 제공하는 다른 도구를 사용하고 싶지 않을 수 있습니다.

따라서 Gradle을 제거하면 Gradle은 더 이상 종속성을 가져 오지 않으며 빌드하지 못합니다. 필요한 경우 해당 종속성을 수동으로 지정할 수 있습니다.

, 가장 큰 문제는 Crashlytics 아티팩트를 직접 참조해서는 안된다는 것입니다. Fabric을 사용하고 결과적으로 Crashlytics를 가져와야합니다. https://dev.twitter.com/fabric/ 안드로이드 / 통합


전이 종속성을 포함하거나 제외하여이 종속성을 해결해야하는지 여부를 설정합니다. 이 종속성에 속하는 아티팩트는 다른 아티팩트에 종속 될 수 있습니다. 후자를 전이 의존성이라고합니다.


Gradle은 기본적으로 전이 의존성을 따릅니다. 특정 라이브러리에 대해이를 끄려면 전이 플래그를 사용하십시오.

전이 플래그의 값을 false로 변경하면 전이 종속성의 다운로드가 방지되므로 필요한 모든 것을 추가해야합니다. 추가 종속성없이 모듈 jar 만 원하는 경우이를 지정할 수도 있습니다.


기본적으로 Gradle종속성은 transitive = true입니다. 한 모듈은 다른 모듈에 종속 될 수 있으며 Gradle은 리포지토리에 대한 선언 된 종속성을 해결할 때 이러한 종속성에 대한 종속성을 검색 할 수 있습니다. 거의 항상 시간을 절약 할 수 있지만 때로는 문제를 일으킬 수 있습니다.

당신은 버전에 따라 다릅니다 경우 module A v1module B v2,와 module A이적에 따라 module B v3, 당신은 최종 의존성이 해결하려면 Gradle을 원하지 않을 수 있습니다. JAR 파일의 잘못된 버전은 컴파일 또는 런타임 클래스 경로로 만들 수 있으며 대부분의 Java 개발자는 실망스러운 경험을 알고 있습니다.

다행히도 전이 의존성 해결을 비활성화하여 변경할있습니다 .

transitive = false 

소스는 여기


transitive전이성을 제어합니다. Gradle은 일반적으로 그렇지 않은 경우를 제외하고 기본적으로 전 이적입니다. 전이성 및 분류기에 버그가 있습니다 ( https://issues.gradle.org/browse/GRADLE-3188 참조) .

참고 URL : https://stackoverflow.com/questions/31731014/what-does-transitive-true-in-gradle-exactly-do-wrt-crashlytics

반응형