Что именно делает Gradle transitive = true
? Это не ясно из документации Gradle . Это в контексте compile
внутри build.gradle
. В моем случае я зависел от сбоев Android.
compile('com.crashlytics.sdk.android:crashlytics:2.2.2@aar') {
transitive = true;
}
Несколько документов Gradle ( здесь и здесь ) подразумевают, что «переходный» по умолчанию имеет значение true. Однако удаление transitive = true
приводит к тому, что переходные зависимости не вносятся (в частности KitGroup
).
class file for io.fabric.sdk.android.KitGroup not found
Документы говорят, что по умолчанию это правда, но реальное поведение кажется противоположным.
Я бегу Gradle 2.2.1. Возможно, поведение изменилось между 2,2 и 2,4?
Изменить : Связанные переходные зависимости не разрешены для библиотеки AAR с использованием Gradle
java
android
gradle
build.gradle
crashlytics
Стив Куо
источник
источник
Ответы:
Вы используете
@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 больше не тянет в зависимости, и это не в состоянии строить. Вы можете указать эту зависимость вручную, если вам нужно.
Это сказанное - я думаю, что самая большая проблема в том, что вы не должны ссылаться на артефакт Crashlytics напрямую - вы должны использовать Fabric и в результате получить Crashlytics: https://dev.twitter.com/fabric/ андроид / интеграции
источник
Устанавливает, должна ли эта зависимость быть разрешена, включая или исключая ее транзитивные зависимости. Артефакты, принадлежащие этой зависимости, могут сами зависеть от других артефактов. Последние называются переходными зависимостями.
источник
Gradle следует переходным зависимостям по умолчанию. Если вы хотите отключить это для определенной библиотеки, используйте переходный флаг.
Изменение значения переходного флага на false предотвращает загрузку переходных зависимостей, поэтому вам придется самостоятельно добавлять все, что требуется. Если вам нужен только jar модуля, без каких-либо дополнительных зависимостей, вы также можете указать это.
источник
transitive
контролирует транзитивность. Gradle обычно по умолчанию является переходным, кроме случаев, когда это не так. Существует ошибка с транзитивностью и классификаторами, см. Https://issues.gradle.org/browse/GRADLE-3188 .источник