Qu'est-ce que transitive = vrai dans Gradle faire exactement (W. R. T. crashlytics)?
Qu'est-ce que Gradle transitive = true
fait exactement? Il n'est pas clair à partir de la documentation Grade . C'est dans le contexte de compile
dans build.gradle
. Dans mon cas, je me fie aux grossièretés D'Androïde.
compile('com.crashlytics.sdk.android:crashlytics:2.2.2@aar') {
transitive = true;
}
plusieurs Gradle docs ( ici et ici ) impliquent que" transitive " par défaut à true. Pourtant, la suppression de transitive = true
se traduit par des dépendances transitoires qui ne sont pas introduites. (en particulier KitGroup
).
class file for io.fabric.sdk.android.KitGroup not found
les docs disent qu'il est par défaut à true, mais le comportement réel semble être le contraire.
je lance Gradle 2.2.1. Peut-être que le comportement a changé entre 2.2 et 2.4?
Modifier : dépendances Transitives pas résolu par l'aar de la bibliothèque à l'aide de gradle
6 réponses
vous utilisez la notation @aar
.
Cela signifie que vous voulez télécharger seulement l'artéfact aar, et aucune dépendance.
Vous pouvez vérifier cette partie de documentation :
Vérifier la section 1.4.1.2. Artifact only notation
:
une notation artéfact only crée une dépendance module qui ne télécharge que le fichier artéfact avec l'extension spécifiée. Les descripteurs de modules existants sont ignorés .
en utilisant la notation @aar
si vous voulez télécharger les dépendances, vous devez ajouter transitive=true
.
Je m'attendais à ce que l'omission de @AAR devrait fonctionner sans ajouter l'attribut transitif.
à mon avis, l'artéfact Crashlytics auquel vous faites référence spécifie manuellement les dépendances comme et non transitive ( transitive=false
) de sorte que vous ne soyez pas forcé d'apporter ces dépendances par défaut. C'est pour ça que tu vois le comportement opposé. Par exemple, certains développeurs peuvent ne pas vouloir tirer dans tous les services Google Play ou tout autre Crashlytics peut utiliser si présent.
ainsi, en enlevant cela, Gradle ne tire plus dans le la dépendance, et elle échoue à construire. Vous pouvez spécifier cette dépendance manuellement si vous en avez besoin.
cela étant dit - je pense que le plus gros problème à portée de main est que vous ne devriez pas faire référence à l'artéfact Crashlytics directement - vous devriez utiliser le tissu, et tirer dans Crashlytics en conséquence: https://dev.twitter.com/fabric/android/integrating
définit si cette dépendance doit être résolue en incluant ou en excluant ses dépendances transitoires. Les objets appartenant à cette dépendance peuvent eux-mêmes avoir des dépendances sur d'autres objets. Ces dernières sont appelées dépendances transitives.
Gradle suit les dépendances transitives par défaut. Si vous voulez désactiver cela pour une bibliothèque particulière, utilisez le drapeau transitif.
changer la valeur du drapeau transitif En false empêche le téléchargement des dépendances transitives, donc vous devrez ajouter tout ce qui est nécessaire vous-même. Si vous voulez seulement un module de pot, sans dépendances supplémentaires, vous pouvez spécifier que.
sur une note plus générale:
Le fait de définir transitive = false
sur la bibliothèque crashlytics
fait que gradle ignore toutes les bibliothèques requises par crashlytics
(="bibliothèques transitoires") et ne les télécharge pas et ne les relie pas.
, Vous devez soit ajouter manuellement les bibliothèques nécessaires à votre projet, ou s'appuyer sur d'autres bibliothèques transitoires ajoutées par d'autres dépendances.
par défaut pour gradle est transitive = true
.
exemples et complets explication ici: http://www.devsbedevin.com/android-understanding-gradle-dependencies-and-resolving-conflicts /
transitive
contrôle la transitivité. Gradle est par défaut transitif, sauf quand ce n'est pas le cas. Il y a un bug avec transitivité et classificateurs, voir https://issues.gradle.org/browse/GRADLE-3188 .