web-dev-qa-db-fra.com

Utiliser gradle pour rechercher un arbre de dépendance

Est-il possible d'utiliser Gradle pour produire un arbre de ce qui dépend de quoi?

J'ai un projet et j'aimerais connaître toutes les dépendances afin de pouvoir l'élaguer un peu avec les déclarations anticipées, etc. 

366
user3286701

Pour Android, utilisez cette ligne

 gradle app:dependencies

ou si vous avez un emballage gradle:

./gradlew app:dependencies

app est votre module de projet. 

De plus, si vous voulez vérifier si quelque chose est dépendant de compile contre testCompile contre androidTestCompile ainsi que de ce qui est extrait:

./gradlew :app:dependencyInsight --configuration compile --dependency <name>
./gradlew :app:dependencyInsight --configuration testCompile --dependency <name>
./gradlew :app:dependencyInsight --configuration androidTestCompile --dependency <name>
450
Chad Bingham

Vous pouvez rendre l'arbre de dépendance avec la commande gradle dependencies. Pour plus d'informations, consultez la section 11.6.4 Liste des dépendances de projets dans le guide de l'utilisateur en ligne.

184
Benjamin Muschko

Si vous avez du mal à parcourir la sortie de la console de gradle dependencies, vous pouvez ajouter le plug-in Project reports :

apply plugin: 'project-report'

Et générer un rapport HTML en utilisant:

$ ./gradlew htmlDependencyReport

Le rapport peut normalement être trouvé dans build/reports/project/dependencies/index.html

Cela ressemble à ceci:  enter image description here

107
Devstr

Dans Android Studio (au moins depuis la v2.3.3), vous pouvez exécuter la commande directement à partir de l'interface utilisateur: 

Cliquez sur l'onglet Gradle puis double-cliquez sur : yourmodule -> Tâches -> Android -> androidDependencies

L'arbre sera affiché dans l'onglet Gradle Console

 An image is worth a thousand words

66
Nicolás Carrasco

Souvent, le graphe complet de dépendances test, compile et androidTestCompile est trop complexe à examiner ensemble. Si vous voulez simplement le graphe de dépendance compile, vous pouvez utiliser:

./gradlew app:dependencies --configuration compile

Source: Gradle docs section 4.7.6

Remarque: compile est obsolète dans les versions les plus récentes de Gradle et, dans les versions plus récentes, il est conseillé de déplacer toutes vos dépendances compile en implementation. S'il vous plaît voir cette réponse ici

22
David Rawson

Si vous souhaitez visualiser vos dépendances dans un graphique, vous pouvez utiliser gradle-dependency-graph-generator plugin.

La sortie de ce plugin se trouve généralement dans le répertoire build/reports/dependency-graph et contient trois fichiers (.dot | .png | .svg) si vous utilisez la version 0.5.0 du plugin.

Exemple de graphique de dépendances dans une application réelle ( Chess Clock ):

 graph

14
David Miguel

Notez que vous devrez peut-être faire quelque chose comme ./gradlew <module_directory>:<module_name>:dependencies si le module a un répertoire supplémentaire avant d'atteindre son build.gradle. En cas de doute, faites ./gradlew tasks --all pour vérifier le nom.

5
林果皞

Dans Android Studio

1) Ouvrez le terminal et assurez-vous d’être dans le dossier racine du projet.

2) Exécutez ./gradlew app:dependencies (si vous n'utilisez pas wrapper Gradle, essayez gradle app:dependencies)

Notez que l'exécution de ./gradle dependencies ne vous donnera que l'arborescence des dépendances du dossier racine du projet. Il est donc important de mentionner app de la manière ci-dessus, c'est-à-dire ./gradlew app:dependencies.

5
Shailesh Mamgain

Les choses ont progressé à Gradle, je pense donc que cette question mérite une autre réponse.
Depuis la version 4.3, "build scans" ont été introduits. Toutes les informations pertinentes sont disponibles dans la documentation Gradle ( 1 , 2 ). Pour moi, cela semble maintenant être le moyen le plus simple de vérifier vos dépendances (et généralement votre construction) de manière claire et organisée.

Ils sont très faciles à créer, exécutez simplement: 

gradle build --scan  

(ou ./gradlew build --scan si vous utilisez un wrapper)

Cela produit un lien généré de manière aléatoire où vous pouvez voir votre analyse. Lorsque vous accédez à ce lien, vous entrez votre email et vous en contrôlez totalement le contrôle, par exemple. partagez-le ou supprimez-le. Il contient beaucoup d’informations sur votre construction}, pas seulement des dépendances. Vous pouvez voir vos dépendances, leurs hiérarchies, le référentiel utilisé pour les obtenir, mais aussi beaucoup d'autres choses à propos de votre build, à savoir ses performances (ce qui est intéressant dans les builds les plus complexes), vos tests, même votre sortie de console et votre la configuration système, le JDK et la JVM utilisés, la taille maximale du tas, etc. 

Ceci est un écran d’affichage à partir d’un projet fictif: 

 Build scan example

Une analyse de génération est un enregistrement partageable d'une génération qui fournit des informations sur ce qui s'est passé et pourquoi. Vous pouvez créer gratuitement une analyse de construction sur scans.gradle.com. 

Notez cependant que les informations pour votre processus de construction seront envoyées} aux serveurs Gradle. Vous avez le plein contrôle pour le supprimer lorsque vous avez terminé votre inspection.

Enfin, vous pouvez utiliser des analyses de construction avec des versions de Gradle antérieures à la 4.3, il vous suffit d'ajouter manuellement le plug-in d'analyse dans votre buildscript.

Modifier:
En intégrant les commentaires des commentaires, quelques notes supplémentaires:
1) Il est très difficile de faire cela par erreur ou sans comprendre que certaines informations de votre construction seront en ligne (privées pour vous, avec la possibilité de les supprimer, mais toujours en ligne). 

Lors de l'exécution de gradle build --scan, le message suivant apparaît: 

Publishing a build scan to scans.gradle.com requires accepting the Gradle
Terms of Service defined at https://gradle.com/terms-of-service. Do you
accept these terms? [yes, no]

Vous devez explicitement écrire yes, puis le message continue: 

Publishing build scan...  
https://gradle.com/s/a12en0dasdu

2) Dans Gradle Enterprise, vous pouvez organiser des analyses de génération Gradle sur vos propres serveurs. Cependant, je n'ai aucune expérience dans ce domaine et mon approche proposée concernait la distribution standard de Gradle, en utilisant les serveurs de Gradle pour vos analyses de génération. 

3) Gradle lui-même fait la promotion des analyses de génération comme moyen de traiter la plupart de vos problèmes de construction. 

3
tryman

J'ai aussi trouvé utile d'exécuter ceci:

./gradlew dI --dependency <your library>

Cela montre comment les dépendances sont résolues (dependencyInsight) et vous aide à déboguer où vous avez besoin de forcer ou d'exclure des bibliothèques dans votre build.gradle

Voir: https://docs.gradle.org/current/userguide/tutorial_gradle_command_line.html

2
Christian Vielma

Pour Android, tapez ceci dans le terminal

gradlew app:dependencies

Il listera toutes les dépendances et celles avec des versions plus récentes que vous pourrez mettre à jour

com.Android.support:customtabs:26.1.0 -> 27.1.1 (*)
2
Remy