Que fait transitive = true
exactement Gradle ? Cela n'apparaît pas clairement dans la documentation de Gradle . C'est dans le contexte de l' compile
intérieur build.gradle
. Dans mon cas, je compte sur les crashlytics d'Android.
compile('com.crashlytics.sdk.android:crashlytics:2.2.2@aar') {
transitive = true;
}
Plusieurs documents Gradle ( ici et ici ) impliquent que "transitive" par défaut est true. Pourtant, la suppression a pour transitive = true
conséquence que les dépendances transitives ne sont pas introduites (en particulier KitGroup
).
class file for io.fabric.sdk.android.KitGroup not found
La documentation dit que la valeur par défaut est true, mais le comportement réel semble être le contraire.
J'utilise Gradle 2.2.1. Peut-être que le comportement a changé entre 2,2 et 2,4?
Edit : les dépendances transitives associées non résolues pour la bibliothèque aar à l'aide de gradle
java
android
gradle
build.gradle
crashlytics
Steve Kuo
la source
la source
Réponses:
Vous utilisez la
@aar
notation.Cela signifie que vous souhaitez télécharger uniquement l'artefact aar, et aucune dépendance.
Vous pouvez consulter cette partie de la documentation :
Consultez la
1.4.1.2. Artifact only notation
section:En utilisant la
@aar
notation si vous souhaitez télécharger les dépendances, vous devez ajoutertransitive=true
.Je m'attendrais à ce qu'en omettant @aar, cela fonctionne sans ajouter l'attribut transitif.
la source
Sur une note plus générale: le paramétrage
transitive = false
sur lacrashlytics
bibliothèque fait que gradle ignore toutes les bibliothèques requises parcrashlytics
(= "bibliothèques transitoires") et ne les télécharge pas et ne les lie pas.Vous devrez soit ajouter manuellement les bibliothèques requises à votre projet, soit compter sur d'autres bibliothèques temporaires ajoutées par d'autres dépendances.
La valeur par défaut pour gradle est
transitive = true
.Exemples et explications complètes ici: http://www.devsbedevin.net/android-understanding-gradle-dependencies-and-resolving-conflicts/
la source
Je suppose que l'artefact Crashlytics auquel vous faites référence spécifie manuellement les dépendances comme non transitive (
transitive=false
) afin que vous ne soyez pas obligé de les intégrer par défaut. C'est pourquoi vous voyez le comportement opposé. Par exemple, certains développeurs peuvent ne pas vouloir intégrer tous les services Google Play ou tout ce que Crashlytics peut utiliser s'il est présent.Ainsi, en supprimant cela, Gradle n'attire plus la dépendance et ne parvient pas à se créer. Vous pouvez spécifier cette dépendance manuellement si vous en avez besoin.
Cela étant dit - je pense que le plus gros problème est que vous ne devriez pas faire référence directement à l'artefact Crashlytics - vous devriez utiliser Fabric, et tirer Crashlytics en conséquence: https://dev.twitter.com/fabric/ android / intégration
la source
Définit si cette dépendance doit être résolue en incluant ou en excluant ses dépendances transitives. Les artefacts appartenant à cette dépendance peuvent eux-mêmes avoir des dépendances sur d'autres artefacts. Ces dernières sont appelées dépendances transitives.
la source
Gradle suit les dépendances transitives par défaut. Si vous souhaitez désactiver cette option pour une bibliothèque particulière, utilisez l'indicateur transitif.
Changer la valeur de l'indicateur transitif sur false empêche le téléchargement des dépendances transitives, vous devrez donc ajouter vous-même ce qui est nécessaire. Si vous souhaitez uniquement un module jar, sans aucune dépendance supplémentaire, vous pouvez également le spécifier.
la source
transitive
contrôle la transitivité. Gradle est normalement par défaut transitif, sauf quand ce n'est pas le cas. Il y a un bogue avec la transitivité et les classificateurs, voir https://issues.gradle.org/browse/GRADLE-3188 .la source