What does transitive = true in Gradle exactly do (w.r.t. crashlytics)?
Что именно делает transitive = true в Gradle (w.r.t. crashlytics)?
Что именно делает Gradle transitive = true? Из документации Gradle неясно. Это в контексте compile within build.gradle . В моем случае я зависю от crashlytics Android.
Несколько документов Gradle (здесь и здесь) подразумевают, что "transitive" по умолчанию имеет значение true. Однако удаление transitive = true приводит к тому, что транзитивные зависимости не вводятся (в частности, KitGroup).
classfilefor io.fabric.sdk.android.KitGroup not found
В документах говорится, что по умолчанию используется значение true, но фактическое поведение кажется противоположным.
Я запускаю Gradle 2.2.1. Возможно, поведение изменилось между 2.2 и 2.4?
Вы используете @aar обозначение. Это означает, что вы хотите загрузить только aar артефакт и никаких транзитивных зависимостей.
Вы можете проверить управление зависимостями в Gradle в официальной документации . В частности:
Обозначение только для артефактов создает зависимость модуля, которая загружает только файл артефакта с указанным расширением. Существующие дескрипторы модуля игнорируются.
Используя @aar обозначение, если вы хотите загрузить зависимости, вам следует добавитьtransitive=true.
Я бы ожидал, что при опущении @aar это должно работать без добавления атрибута transitive .
Ответ 2
Более общее замечание: установка transitive = false в crashlytics библиотеке заставляет gradle игнорировать все библиотеки, требуемые crashlytics (= "переходные библиотеки"), а не загружать и связывать их.
Вам придется либо вручную добавить необходимые библиотеки в свой проект, либо полагаться на другие переходные библиотеки, добавленные другими зависимостями.
По умолчанию для gradle является transitive = true.
Я предполагаю, что артефакт Crashlytics, на который вы ссылаетесь, вручную определяет зависимости как не транзитивные (transitive=false), так что вы не вынуждены вводить эти зависимости по умолчанию. Вот почему вы видите противоположное поведение. Например, некоторые разработчики могут не захотеть подключать все сервисы Google Play или что-либо еще, что может использовать Crashlytics, если таковой имеется.
Итак, удалив это, Gradle больше не использует зависимость и не выполняет сборку. Вы можете указать эту зависимость вручную, если вам нужно.
При этом, как говорится - я думаю, что более серьезная проблема заключается в том, что вам не следует напрямую ссылаться на артефакт Crashlytics - вы должны использовать Fabric и в результате использовать Crashlytics: https://dev.twitter.com/fabric/android/integrating
Ответ 4
Определяет, следует ли разрешать эту зависимость, включая или исключая ее транзитивные зависимости. Артефакты, принадлежащие этой зависимости, сами могут иметь зависимости от других артефактов. Последние называются транзитивными зависимостями.