Comment obtenir une arborescence de dépendances pour un artefact?

123

dependency:treepeut être utilisé pour voir l'arborescence des dépendances pour un projet donné. Mais ce dont j'ai besoin, c'est de voir l'arborescence des dépendances pour un artefact tiers.

Je suppose que je peux créer un projet vide, mais je cherche quelque chose de plus simple (je dois le faire pour plusieurs artefacts).

IttayD
la source

Réponses:

158

1) Utilisez le plugin de dépendance maven

Créez un projet simple avec pom.xml uniquement. Ajoutez votre dépendance et exécutez:

mvn dependency:tree

Malheureusement, la dépendance mojo doit utiliser pom.xml ou vous obtenez l'erreur suivante:

Impossible d'exécuter mojo: tree. Il nécessite un projet avec un pom.xml existant, mais la construction n'en utilise pas.

2) Trouvez pom.xml de votre artefact dans le référentiel central maven

Les dépendances sont décrites dans pom.xml de votre artefact. Trouvez-le en utilisant l'infrastructure maven.

Accédez à http://search.maven.org/ et entrez votre groupId et artifactId.

Ou vous pouvez aller sur http://repo1.maven.org/maven2/ et naviguer d'abord en utilisant les plugins groupId, puis en utilisant artifactId et enfin en utilisant sa version.

Par exemple, voir org.springframework: spring-core

3) Utilisez le plugin de dépendance maven contre votre artefact

Une partie de l'artefact de dépendance est un pom.xml. Cela spécifie sa dépendance. Et vous pouvez exécuter mvn dependency: tree sur ce pom.

amra
la source
3
Comme je l'ai dit, je veux éviter d'avoir à créer un projet
IttayD
vous ne «créez» pas un projet, vous téléchargez simplement un fichier POM.
Sean Patrick Floyd
1
Vous n'êtes pas obligé de créer un nouveau projet. Jetez simplement un œil dans votre dépôt local et trouvez le pom.xml de l'atifact
amra
Cela ne fonctionne pas si le module enfant n'existe pas. par exemple `` mvn -f ~ / .m2 / repository / org / jboss / shrinkwrap / descriptors / shrinkwrap-descriptors-parent / 2.0.0-alpha-10 / shrinkwrap-descriptors-parent-2.0.0-alpha-10. pom depen dency: tree [INFO] Recherche de projets ... [ERROR] [ERROR] Quelques problèmes ont été rencontrés lors du traitement des POM: [ERROR] Module enfant ~ / .m2 / repository / org / jboss / shrinkwrap / descriptors / shrinkwrap -descriptors-parent / 2.0.0-alpha-10 / api-base de ... / descriptors-parent / 2.0.0-alpha-10 / shrinkwrap-descriptors-parent-2.0.0-alpha-10.pom ne le fait pas existent `` ``
Ding-Yi Chen
1
Pour un projet Maven multi-module (c'est-à-dire un projet avec plusieurs pom.xmlfichiers), vous pouvez obtenir une erreur. Essayez mvn compile dependency:treealors.
izogfif
49

Si vous prenez la peine de créer un exemple de projet et d'y ajouter votre dépendance tierce, vous pouvez exécuter ce qui suit pour voir la hiérarchie complète des dépendances.

Vous pouvez rechercher un artefact spécifique à l' aide de cette commande maven:

mvn dependency:tree -Dverbose -Dincludes=[groupId]:[artifactId]:[type]:[version]

Selon la documentation:

où chaque segment de modèle est facultatif et prend en charge les caractères génériques complets et partiels *. Un segment de modèle vide est traité comme un caractère générique implicite.

Imaginez que vous essayez de trouver le fichier jar 'log4j-1.2-api' parmi différents modules de votre projet:

mvn dependency:tree -Dverbose -Dincludes=org.apache.logging.log4j:log4j-1.2-api

plus d'informations peuvent être trouvées ici .

Edit: Veuillez noter que malgré les avantages de l'utilisation du paramètre verbeux , il peut ne pas être aussi précis dans certaines conditions. Parce qu'il utilise l'algorithme Maven 2 et peut donner des résultats erronés lorsqu'il est utilisé avec Maven 3.

Kayvan Tehrani
la source
2
Excellente suggestion! -Dverboseétait suffisant pour me montrer l'arbre complet dont j'avais besoin. Faire passer la sortie vers lessou similaire et effectuer une recherche rapide fonctionne très bien si vous ne vous souvenez pas du includesdrapeau ou si vous ne voulez pas fournir le texte complet ou générique groupId:)
jocull
Cela ne fonctionne pas sans un pom.xml présent qui contient l'artefact que vous regardez. Sinon, vous obtenez[ERROR] Failed to execute goal org.apache.maven.plugins:maven-dependency-plugin:2.8:tree (default-cli): Goal requires a project to execute but there is no POM in this directory (...). Please verify you invoked Maven from the correct directory. -> [Help 1]
Eisenknurr
-Dverbose est obsolète dans le plugin de dépendance, donc cela ne fonctionne plus à moins que vous n'utilisiez une version assez ancienne.
toolforger le
6

La solution est d'appeler dependency: tree avec le fichier pom.xml de l'artefact:

mvn -f "$HOME/.m2/repository/$POM_PATH" dependency:tree

Voir aussi Comment lister les dépendances transitives d'un artefact à partir d'un référentiel?

Matthias M
la source
Cela peut ne pas fonctionner avec les artefacts téléchargés à partir d'un référentiel central, à cause de 'distributionManagement.status'. Il est ajouté par le référentiel central lors du téléchargement. Et cela créera une dépendance: la validation de l'arborescence échouera sur le fichier pom. Voir issues.apache.org/jira/browse/MNG-3178
Arnaud Jeansen
2

Si vous utilisez une version actuelle de m2eclipse (ce que vous devriez si vous utilisez eclipse et maven):

Sélectionnez l'entrée de menu

Navigate -> Open Maven POM

et entrez l'artefact que vous recherchez.

Le pom s'ouvre dans l'éditeur de pom, à partir duquel vous pouvez sélectionner l'onglet Dependency Hierarchypour afficher la hiérarchie des dépendances (comme son nom l'indique :-))

Sean Patrick Floyd
la source
2
OK, alors cette réponse est pour les autres utilisateurs :-)
Sean Patrick Floyd
1

Si votre artefact n'est pas une dépendance d'un projet donné, le mieux est d'utiliser un moteur de recherche de référentiel . Beaucoup d'entre eux décrivent les dépendances d'un artefact donné.

Pascal Thivent
la source
les artefacts qui m'intéressent font partie d'un produit d'entreprise
IttayD
alors la réponse d'amra est votre meilleur pari, j'en ai peur.
Sean Patrick Floyd
@IttayD: Pourquoi ne mentionnez-vous pas ce genre de détail important dans votre question? Cela aiderait à obtenir de meilleures réponses à mon humble avis (et pourrait également aider les lecteurs à ne pas perdre leur temps).
Pascal Thivent
0

Si vous souhaitez obtenir une représentation graphique et interrogeable de l'arborescence de dépendances (y compris tous les modules de votre projet, les dépendances transitives et les informations d'éviction), consultez UpdateImpact: https://app.updateimpact.com (service gratuit).

Clause de non-responsabilité: je suis l'un des développeurs du site

Adamw
la source
0

Je sais que cet article est assez ancien, mais quand même, si quelqu'un utilisant IntelliJ veut voir l'arbre de dépendances directement dans l'EDI, il peut installer le plugin Maven Helper Plugin .

Une fois installé, ouvrez pom.xml et vous pourrez voir l' onglet Analyse des dépendances comme ci-dessous. Il fournit également une option pour voir uniquement les dépendances en conflit et également sous forme d'arborescence.

entrez la description de l'image ici

rns
la source