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.
Pour Android, utilisez cette ligne
gradle app:dependencies
ou si vous avez un emballage gradle:
./gradlew app:dependencies
où 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>
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.
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
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
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 ):
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.
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
.
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:
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.
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
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 (*)