Utiliser gradle pour trouver l'arbre de dépendance
543
Est-il possible d'utiliser gradle pour produire un arbre de ce qui dépend de quoi?
J'ai un projet et je voudrais découvrir toutes les dépendances afin que je puisse être en mesure de l'élaguer un peu avec des déclarations avancées, etc.
@OliverCharlesworth veuillez utiliser le bouton de fermeture pour marquer la réponse comme doublon
030
1
@ user3286701 peut-être pourriez-vous accepter l'une des réponses?
030
6
gradle dependenciesdevrait marcher. C'est fou comme tout le monde l'a gradlew app:dependenciesprobablement à cause d'Android.
Prayagupd
2
@prayagupd Cela devrait être la réponse. La question concerne Gradle. Après avoir lu les réponses les mieux classées, j'ai ouvert le terminal et je suis entré dans le répertoire d'un projet général qui utilise gradle. J'ai exécuté «gradle app: dependencies» et j'ai obtenu l'erreur «Build failed» même si je n'avais pas prévu de construire quoi que ce soit. Mon projet se construit bien et je voulais juste voir les dépendances.
ka3ak
Réponses:
604
Pour Android, utilisez cette ligne
gradle app:dependencies
ou si vous avez un emballage Gradle:
./gradlew app:dependencies
où appest votre module de projet.
De plus, si vous souhaitez vérifier si quelque chose est compilevs testCompilevs androidTestCompiledépendance ainsi que ce qui le tire:
Ah, je devais y mettre le nom du module. Voilà pourquoi ... Merci!
Jenix
Je viens de commencer à étudier Gradle maintenant, donc un peu confus. Puis-je traiter Gradlew comme Gradle, je veux dire, puis-je saisir les mêmes options / commandes que Gradle avec Gradlew?
Jenix
1
@Jenix ouais, si vous utilisez un wrapper, utilisez simplement ./gradlewà la place degradle
Chad Bingham
2
J'obtiens l'erreur Project 'app' not found in root projectlors de l'exécution de ces commandes. La solution de Benjamins a cependant fonctionné.
krock
5
En fait, ./gradlew :dependenciescela fonctionnera. Il listera les dépendances pour tous vos projets, mais il est facile de trouver le bon.
dirkjot
240
Vous pouvez rendre l'arborescence des dépendances avec la commande gradle dependencies. Pour plus d'informations, consultez la section 11.6.4 Liste des dépendances de projet dans le guide de l'utilisateur en ligne.
Lorsque je fais cela avec mon projet Android, tout ce que j'obtiens est cette sortie: pastebin.com/fHFigAuY Suggestions?
Nilzor
3
@Nilzor Vous exécutez probablement la commande dans le mauvais répertoire (qui ne contient pas le build.gradlefichier) ou votre fichier de build n'applique aucun plugin.
Benjamin Muschko
6
vous pouvez obtenir des dépendances pour un projet spécifique en utilisant gradle: project: dependencies
@ user3526 cliquez sur la balise "gradle" située sur le côté droit de votre écran. Regardez l'image ci-jointe pour référence
Nicolás Carrasco
2
J'ai trouvé que cela crée une liste plate dans AS 3.2.0, au lieu d'un arbre. La variante de ligne de commande crée cependant une arborescence.
Tom
5
@Tom exécute la tâche «dépendances» dans la catégorie «aide» et non «android». Il montre comme arbre
Maxim Berezovsky
27
Souvent , le complet test, compileet androidTestCompilegraphe de dépendance est trop pour examiner ensemble. Si vous voulez simplement le compilegraphique de dépendance, vous pouvez utiliser:
Remarque: compilea été déconseillé dans les versions plus récentes de Gradle et dans les versions plus récentes, il est conseillé de déplacer toutes vos compiledépendances vers implementation. Veuillez voir cette réponse ici
Généralement, la sortie de ce plugin se trouve 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 ):
Hey David, j'ai fait ce qui était dit dans les instructions du plugin. J'ai appliqué le plugin dans le projet gradle mais je ne vois aucun dossier de rapports dans le répertoire de construction. Y a-t-il autre chose que nous devons faire à part construire et exécuter le projet?
Les choses ont progressé à Gradle, donc je pense que cette question mérite une autre réponse.
Depuis Gradle 4.3, des « scans de build » ont été introduits. Toutes les informations pertinentes sont disponibles dans les documents 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 build) de manière claire et organisée.
Ils sont très faciles à créer, il suffit d'exécuter:
gradle build --scan
(ou ./gradlew build --scansi vous utilisez un wrapper)
Cela produit un lien généré aléatoirement où vous pouvez voir votre scan. Lorsque vous ouvrez ce lien, vous entrez votre adresse e-mail et prenez le contrôle total du lien: par exemple. partagez-le ou supprimez-le. Il contient de nombreuses informations sur votre build , 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 sur votre build, à savoir ses performances (qui sont intéressantes pour les builds complexes), vos tests, même la sortie de votre console et votre configuration du système, qui JDK et JVM ont été utilisés, taille maximale du tas, etc.
Il s'agit d'un écran d'impression d'un projet simulé:
Une analyse de build est un enregistrement partageable d'une build qui fournit des informations sur ce qui s'est passé et pourquoi. Vous pouvez créer gratuitement un scan de build sur scans.gradle.com.
Notez cependant que les informations relatives à votre processus de génération seront envoyées aux serveurs Gradle. Vous avez le plein contrôle pour le supprimer lorsque vous avez terminé votre inspection.
Enfin, vous pouvez également utiliser des scans de build avec des versions Gradle antérieures à 4.3, il vous suffit d'ajouter manuellement le plugin scans dans votre buildscript.
Edit :
Incorporer quelques commentaires des commentaires quelques notes supplémentaires:
1) Il est très difficile de le faire par erreur ou sans comprendre que certaines informations pour votre build seront en ligne (privées pour vous, avec la possibilité de les supprimer, mais toujours en ligne) ).
Lors de l'exécution, gradle build --scanle 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 écrire explicitement yes, puis le message continue:
2) Dans Gradle Enterprise, vous pouvez héberger 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 build.
3) Gradle lui-même fait la promotion des scans de build comme moyen de traiter la plupart de vos problèmes de build.
Désolé de dévaloriser la réponse, mais l'OMI ne répond pas à la question et ne prévient pas assez clairement qu'en gradle build --scanpubliant les détails de votre construction quelque part sur Internet - et pour la supprimer, vous devez l'associer à une adresse e-mail fonctionnelle.
Michal
1
Hé Michal, tu es le bienvenu pour voter si tu le ressens. Cependant, je dois demander, avez-vous essayé? Lors de l' exécution gradle build --scancmd, vous êtes invité: 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 écrire manuellement yes. Juste après cela, vous obtenez le message: Publishing build scan... https://gradle.com/s/a12en0dasdu(mettez au hasard un lien du même type). Je pense donc que cela vous avertit de manière appropriée avant. (1/2)
tryman
1
Vous pouvez visiter le lien et supprimer l'analyse immédiatement, sans e-mail ni rien. En guise de réponse, je crois que cela répond à la question . En fait, il vous montre des informations supplémentaires sur vos dépendances (et va plus loin: des informations supplémentaires pour l'ensemble du build également) par rapport à d'autres approches. Si vous ne le trouvez pas à votre goût, c'est tout à fait correct, mais c'est (à ma connaissance) l'outil le plus complet en ce moment pour le travail, il est donc utile de l'avoir à l'esprit. Enfin, il est promu par Gradle lui-même, c'est littéralement leur premier guide (2/2)
tryman
@Michal Désolé, j'ai oublié de vous taguer avant donc vous n'avez peut-être pas vu mes commentaires. (J'ai également édité le post pour incorporer les commentaires avec lesquels je vous ai répondu.)
tryman
2
Je n'ai pas essayé cela - merci d'avoir clarifié l'acceptation des termes. J'ai supprimé mon -1.
Michal
9
Dans Android Studio
1) Ouvrez le terminal et assurez-vous que vous êtes dans le dossier racine du projet.
2) Exécutez ./gradlew app:dependencies (si vous n'utilisez pas de wrapper Gradle, essayez gradle app:dependencies)
Notez que l'exécution ./gradle dependenciesne vous donnera que l'arbre de dépendance du dossier racine du projet, il est donc important de mentionner l'application de la manière ci-dessus ./gradlew app:dependencies.
pour moi, cela fonctionnait sans le "./", comme ça: gradlew app: dépendances.
Gilad Levinson
7
J'ai également 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 devez forcer ou exclure les bibliothèques dans votrebuild.gradle
Notez que vous devrez peut-être faire quelque chose comme ./gradlew <module_directory>:<module_name>:dependenciessi le module a un répertoire supplémentaire avant d'atteindre son build.gradle. En cas de doute, ./gradlew tasks --allvérifiez le nom.
Si vous voulez toutes les dépendances dans un seul fichier à la fin en deux étapes. Ajoutez ceci à votre build.gradle.ktsdans la racine de votre projet:
Cela vous donnera toutes les dépendances de votre projet et sous-projets ainsi que toutes les dépendances tierces.
Si vous voulez que cela se fasse de manière programmatique, vous aurez besoin d'un rendu personnalisé des dépendances - vous pouvez commencer par étendre le AsciiDependencyReportRendererqui imprime un graphique ascii des dépendances par défaut.
gradle dependencies
devrait marcher. C'est fou comme tout le monde l'agradlew app:dependencies
probablement à cause d'Android.Réponses:
Pour Android, utilisez cette ligne
ou si vous avez un emballage Gradle:
où
app
est votre module de projet.De plus, si vous souhaitez vérifier si quelque chose est
compile
vstestCompile
vsandroidTestCompile
dépendance ainsi que ce qui le tire:la source
./gradlew
à la place degradle
Project 'app' not found in root project
lors de l'exécution de ces commandes. La solution de Benjamins a cependant fonctionné../gradlew :dependencies
cela fonctionnera. Il listera les dépendances pour tous vos projets, mais il est facile de trouver le bon.Vous pouvez rendre l'arborescence des dépendances avec la commande
gradle dependencies
. Pour plus d'informations, consultez la section 11.6.4 Liste des dépendances de projet dans le guide de l'utilisateur en ligne.la source
build.gradle
fichier) ou votre fichier de build n'applique aucun plugin../gradlew dependencies
Si vous trouvez difficile de naviguer dans la sortie de la console de
gradle dependencies
, vous pouvez ajouter le plug - in Rapports de projet :Et générez un rapport HTML en utilisant:
Le rapport se trouve normalement dans
build/reports/project/dependencies/index.html
Cela ressemble à ceci:
la source
gradle htmlDependencyReport
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 -> Tasks -> android -> androidDependencies
L'arbre sera affiché dans l' onglet Gradle Console
la source
Souvent , le complet
test
,compile
etandroidTestCompile
graphe de dépendance est trop pour examiner ensemble. Si vous voulez simplement lecompile
graphique de dépendance, vous pouvez utiliser:Source: Gradle docs section 4.7.6
Remarque:
compile
a été déconseillé dans les versions plus récentes de Gradle et dans les versions plus récentes, il est conseillé de déplacer toutes voscompile
dépendances versimplementation
. Veuillez voir cette réponse icila source
Si vous souhaitez visualiser vos dépendances dans un graphique, vous pouvez utiliser le plugin gradle-dependency-graph-generator .
Généralement, la sortie de ce plugin se trouve 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 ):
la source
Pour Android, saisissez ceci dans le terminal
Il listera toutes les dépendances et celles avec des versions plus récentes pour vous mettre à niveau comme
la source
Les choses ont progressé à Gradle, donc je pense que cette question mérite une autre réponse.
Depuis Gradle 4.3, des « scans de build » ont été introduits. Toutes les informations pertinentes sont disponibles dans les documents 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 build) de manière claire et organisée.
Ils sont très faciles à créer, il suffit d'exécuter:
(ou
./gradlew build --scan
si vous utilisez un wrapper)Cela produit un lien généré aléatoirement où vous pouvez voir votre scan. Lorsque vous ouvrez ce lien, vous entrez votre adresse e-mail et prenez le contrôle total du lien: par exemple. partagez-le ou supprimez-le. Il contient de nombreuses informations sur votre build , 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 sur votre build, à savoir ses performances (qui sont intéressantes pour les builds complexes), vos tests, même la sortie de votre console et votre configuration du système, qui JDK et JVM ont été utilisés, taille maximale du tas, etc.
Il s'agit d'un écran d'impression d'un projet simulé:
Notez cependant que les informations relatives à votre processus de génération seront envoyées aux serveurs Gradle. Vous avez le plein contrôle pour le supprimer lorsque vous avez terminé votre inspection.
Enfin, vous pouvez également utiliser des scans de build avec des versions Gradle antérieures à 4.3, il vous suffit d'ajouter manuellement le plugin scans dans votre buildscript.
Edit :
Incorporer quelques commentaires des commentaires quelques notes supplémentaires:
1) Il est très difficile de le faire par erreur ou sans comprendre que certaines informations pour votre build seront en ligne (privées pour vous, avec la possibilité de les supprimer, mais toujours en ligne) ).
Lors de l'exécution,
gradle build --scan
le message suivant apparaît:Vous devez écrire explicitement
yes
, puis le message continue:2) Dans Gradle Enterprise, vous pouvez héberger 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 build.
3) Gradle lui-même fait la promotion des scans de build comme moyen de traiter la plupart de vos problèmes de build.
la source
gradle build --scan
publiant les détails de votre construction quelque part sur Internet - et pour la supprimer, vous devez l'associer à une adresse e-mail fonctionnelle.gradle build --scan
cmd, vous êtes invité: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 écrire manuellementyes
. Juste après cela, vous obtenez le message:Publishing build scan... https://gradle.com/s/a12en0dasdu
(mettez au hasard un lien du même type). Je pense donc que cela vous avertit de manière appropriée avant. (1/2)Dans Android Studio
1) Ouvrez le terminal et assurez-vous que vous êtes dans le dossier racine du projet.
2) Exécutez
./gradlew app:dependencies
(si vous n'utilisez pas de wrapper Gradle, essayezgradle app:dependencies
)Notez que l'exécution
./gradle dependencies
ne vous donnera que l'arbre de dépendance du dossier racine du projet, il est donc important de mentionner l'application de la manière ci-dessus./gradlew app:dependencies
.la source
J'ai également trouvé utile d'exécuter ceci:
Cela montre comment les dépendances sont résolues (
dependencyInsight
) et vous aide à déboguer où vous devez forcer ou exclure les bibliothèques dans votrebuild.gradle
Voir: https://docs.gradle.org/current/userguide/tutorial_gradle_command_line.html
la source
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,./gradlew tasks --all
vérifiez le nom.la source
Pour moi, c'était simplement une commande
dans build.gradle add
plugin
puis allez à cmd et exécutez la commande suivante
Cela me donne un rapport HTML Rapport WOW Html 💕
C'est tout mon seigneur.
la source
Pour les versions récentes de Gradle (j'ai testé avec la version 6.4.1):
ou si vous utilisez le Gradle Wrapper:
la source
Si vous voulez toutes les dépendances dans un seul fichier à la fin en deux étapes. Ajoutez ceci à votre
build.gradle.kts
dans la racine de votre projet:Ensuite, appliquez:
Cela vous donnera toutes les dépendances de votre projet et sous-projets ainsi que toutes les dépendances tierces.
Si vous voulez que cela se fasse de manière programmatique, vous aurez besoin d'un rendu personnalisé des dépendances - vous pouvez commencer par étendre le
AsciiDependencyReportRenderer
qui imprime un graphique ascii des dépendances par défaut.la source