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

128
demandé sur Community 2015-07-30 21:07:11

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.

101
répondu Gabriele Mariotti 2015-07-31 19:31:39

à 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

5
répondu Sam Dozor 2015-07-30 21:40:16

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.

1
répondu user6703435 2016-08-11 06:20:18

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.

1
répondu Hongyuan 2016-10-09 02:18:51

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 /

1
répondu Vaiden 2017-06-13 07:25:49

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 .

-12
répondu Steve Kuo 2015-07-30 21:20:15