Wie erhalte ich einen Abhängigkeitsbaum für ein Artefakt?

123

dependency:treekann verwendet werden, um den Abhängigkeitsbaum für ein bestimmtes Projekt anzuzeigen. Ich muss jedoch den Abhängigkeitsbaum für ein Artefakt eines Drittanbieters anzeigen.

Ich denke, ich kann ein leeres Projekt erstellen, aber ich suche etwas Einfacheres (ich muss dies für mehrere Artefakte tun).

IttayD
quelle

Antworten:

158

1) Verwenden Sie das Maven-Abhängigkeits-Plugin

Erstellen Sie ein einfaches Projekt nur mit pom.xml. Fügen Sie Ihre Abhängigkeit hinzu und führen Sie Folgendes aus:

mvn dependency:tree

Leider muss das Abhängigkeits-Mojo pom.xml verwenden, sonst wird folgende Fehlermeldung angezeigt:

Mojo: tree kann nicht ausgeführt werden. Es erfordert ein Projekt mit einer vorhandenen pom.xml, aber der Build verwendet keine.

2) Finden Sie pom.xml Ihres Artefakts im zentralen Maven-Repository

Abhängigkeiten werden in pom.xml Ihres Artefakts beschrieben. Finden Sie es mithilfe der Maven-Infrastruktur.

Gehen Sie zu http://search.maven.org/ und geben Sie Ihre Gruppen-ID und Ihre Artefakt-ID ein.

Oder Sie gehen zu http://repo1.maven.org/maven2/ und navigieren zuerst mit den Plugins groupId, später mit artefaktId und schließlich mit der Version.

Siehe zum Beispiel org.springframework: spring-core

3) Verwenden Sie das Maven-Abhängigkeits-Plugin für Ihr Artefakt

Ein Teil des Abhängigkeitsartefakts ist eine pom.xml. Das gibt die Abhängigkeit an. Und Sie können mvn dependency: tree auf diesem pom ausführen .

amra
quelle
3
Wie gesagt, ich möchte vermeiden, dass ein Projekt erstellt werden muss
IttayD
Sie erstellen kein Projekt, sondern laden lediglich eine POM-Datei herunter.
Sean Patrick Floyd
1
Sie müssen kein neues Projekt erstellen. Werfen Sie einfach einen Blick in Ihr lokales Repository und finden Sie die pom.xml des atifact
amra
Dies funktioniert nicht, wenn das untergeordnete Modul nicht vorhanden ist. zB `` `mvn -f ~ / .m2 / repository / org / jboss / shrinkwrap / deskriptoren / shrinkwrap-deskriptoren-parent / 2.0.0-alpha-10 / shrinkwrap-deskriptoren-parent-2.0.0-alpha-10. pom Abhängigkeit: Baum [INFO] Nach Projekten suchen ... [FEHLER] [FEHLER] Bei der Verarbeitung der POMs sind einige Probleme aufgetreten: [FEHLER] Untergeordnetes Modul ~ / .m2 / repository / org / jboss / shrinkwrap / deskriptoren / shrinkwrap -descriptors-parent / 2.0.0-alpha-10 / api-base von ... / deskriptoren-parent / 2.0.0-alpha-10 / shrinkwrap-deskriptoren-parent-2.0.0-alpha-10.pom nicht existieren `` `
Ding-Yi Chen
1
Bei einem Maven-Projekt mit mehreren Modulen (dh einem Projekt mit mehreren pom.xmlDateien) wird möglicherweise eine Fehlermeldung angezeigt. Versuchen Sie es mvn compile dependency:treedann.
izogfif
49

Wenn Sie ein Beispielprojekt erstellen und Ihre Abhängigkeit von Drittanbietern hinzufügen möchten, können Sie Folgendes ausführen, um die vollständige Hierarchie der Abhängigkeiten anzuzeigen.

Mit diesem Befehl können Sie nach einem bestimmten Artefakt suchen:

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

Laut Dokumentation:

Dabei ist jedes Mustersegment optional und unterstützt vollständige und teilweise * Platzhalter. Ein leeres Mustersegment wird als impliziter Platzhalter behandelt.

Stellen Sie sich vor, Sie versuchen, die JAR-Datei 'log4j-1.2-api' in verschiedenen Modulen Ihres Projekts zu finden:

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

Weitere Informationen finden Sie hier .

Bearbeiten: Bitte beachten Sie, dass es trotz der Vorteile der Verwendung ausführlicher Parameter unter bestimmten Bedingungen möglicherweise nicht so genau ist. Weil es den Maven 2-Algorithmus verwendet und bei Verwendung mit Maven 3 möglicherweise falsche Ergebnisse liefert.

Kayvan Tehrani
quelle
2
Toller Vorschlag! -Dverbosewar genug, um mir den vollen Baum zu zeigen, den ich brauchte. Das Weiterleiten der Ausgabe an lessoder ähnliches und das Durchführen einer Schnellsuche funktioniert hervorragend, wenn Sie sich nicht an die includesFlagge erinnern können oder nicht den vollständigen oder Platzhalter bereitstellen möchten groupId:)
jocull
Dies funktioniert nicht ohne eine pom.xml, die das Artefakt enthält, das Sie betrachten. Sonst bekommst du[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 ist im Abhängigkeits-Plugin veraltet, daher funktioniert dies nicht mehr, es sei denn, Sie verwenden eine ziemlich alte Version.
Werkzeugschmiede
6

Die Lösung besteht darin, dependency: tree mit der Datei pom.xml des Artefakts aufzurufen:

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

Siehe auch Wie liste ich die transitiven Abhängigkeiten eines Artefakts aus einem Repository auf?

Matthias M.
quelle
Dies funktioniert möglicherweise nicht mit Artefakten, die aus einem zentralen Repository heruntergeladen wurden, da 'DistributionManagement.status' vorliegt. Es wird beim Hochladen vom zentralen Repository hinzugefügt. Dies führt zu einer Abhängigkeit: Die Überprüfung des Baumfehlers in der POM-Datei schlägt fehl. Siehe Issues.apache.org/jira/browse/MNG-3178
Arnaud Jeansen
2

Wenn Sie eine aktuelle Version von m2eclipse verwenden (was Sie tun sollten, wenn Sie Eclipse und Maven verwenden):

Wählen Sie den Menüeintrag

Navigate -> Open Maven POM

und geben Sie das gesuchte Artefakt ein.

Der POM wird im POM-Editor geöffnet, auf dem Sie die Registerkarte auswählen können, um Dependency Hierarchydie Abhängigkeitshierarchie anzuzeigen (wie der Name schon sagt :-)).

Sean Patrick Floyd
quelle
2
OK, dann ist diese Antwort für andere Benutzer :-)
Sean Patrick Floyd
1

Wenn Ihr Artefakt keine Abhängigkeit von einem bestimmten Projekt ist, verwenden Sie am besten eine Repository-Suchmaschine . Viele von ihnen beschreiben die Abhängigkeiten eines bestimmten Artefakts.

Pascal Thivent
quelle
Die Artefakte, an denen ich interessiert bin, sind Teil eines Firmenprodukts
IttayD
Dann ist Amras Antwort Ihre beste Wahl, fürchte ich.
Sean Patrick Floyd
@IttayD: Warum erwähnen Sie diese Art von wichtigen Details nicht in Ihrer Frage? Dies würde meiner Meinung nach helfen, bessere Antworten zu erhalten (und könnte auch den Lesern helfen, ihre Zeit nicht zu verschwenden).
Pascal Thivent
0

Wenn Sie eine grafische, durchsuchbare Darstellung des Abhängigkeitsbaums erhalten möchten (einschließlich aller Module aus Ihrem Projekt, transitiver Abhängigkeiten und Räumungsinformationen), lesen Sie UpdateImpact: https://app.updateimpact.com (kostenloser Service).

Haftungsausschluss: Ich bin einer der Entwickler der Website

Adamw
quelle
0

Ich weiß, dass dieser Beitrag ziemlich alt ist, aber wenn jemand, der IntelliJ verwendet , den Abhängigkeitsbaum direkt in der IDE sehen möchte, kann er das Maven Helper Plugin Plugin installieren .

Nach der Installation öffnen Sie pom.xml und Sie können die Registerkarte Abhängigkeitsanalyse wie unten sehen. Es bietet auch die Möglichkeit, Abhängigkeiten anzuzeigen, die nur in Konflikt stehen, und auch als Baumstruktur.

Geben Sie hier die Bildbeschreibung ein

rns
quelle