Come ottenere un albero delle dipendenze per un artefatto?


123

dependency:treepuò essere utilizzato per vedere l'albero delle dipendenze per un determinato progetto. Ma quello di cui ho bisogno è vedere l'albero delle dipendenze per un artefatto di terze parti.

Immagino di poter creare un progetto vuoto, ma sto cercando qualcosa di più semplice (devo farlo per diversi artefatti).

Risposte:


158

1) Usa il plugin di dipendenza Maven

Crea un progetto semplice solo con pom.xml. Aggiungi la tua dipendenza ed esegui:

mvn dependency:tree

Sfortunatamente, la dipendenza mojo deve usare pom.xml o ottieni il seguente errore:

Impossibile eseguire mojo: tree. Richiede un progetto con un pom.xml esistente, ma la build non ne utilizza uno.

2) Trova pom.xml del tuo artefatto nel repository centrale di Maven

Le dipendenze sono descritte in pom.xml del tuo artefatto. Trovalo utilizzando un'infrastruttura avanzata.

Vai a http://search.maven.org/ e inserisci il tuo groupId e artifactId.

Oppure puoi andare su http://repo1.maven.org/maven2/ e navigare prima usando i plugin groupId, poi usando artifactId e infine usando la sua versione.

Ad esempio, vedere org.springframework: spring-core

3) Usa il plugin di dipendenza Maven contro il tuo artefatto

Parte dell'artefatto di dipendenza è un pom.xml. Questo specifica la sua dipendenza. E puoi eseguire mvn dependency: tree su questo pom.


3
Come ho detto, voglio evitare la necessità di creare un progetto
IttayD

non stai "creando" un progetto, stai solo scaricando un file POM.
Sean Patrick Floyd,

1
Non devi creare un nuovo progetto. Dai un'occhiata al tuo archivio locale e trova il pom.xml del manufatto
amra

Questo non funziona se il modulo figlio non esiste. es. `` mvn -f ~ / .m2 / repository / org / jboss / shrinkwrap / descriptors / shrinkwrap-descriptors-parent / 2.0.0-alpha-10 / shrinkwrap-descriptors-parent-2.0.0-alpha-10. dipendenza pom: albero [INFO] Scansione dei progetti ... [ERRORE] [ERRORE] Si sono verificati alcuni problemi durante l'elaborazione dei POM: [ERRORE] Modulo figlio ~ / .m2 / repository / org / jboss / shrinkwrap / descriptors / shrinkwrap -descriptors-parent / 2.0.0-alpha-10 / api-base of ... / descriptors-parent / 2.0.0-alpha-10 / shrinkwrap-descriptors-parent-2.0.0-alpha-10.pom non lo fa esistere ``
Ding-Yi Chen

1
Per il progetto Maven multi-modulo (cioè progetto con diversi pom.xmlfile) potresti ottenere un errore. mvn compile dependency:treeAllora prova .
izogfif

49

Se ti preoccupi di creare un progetto di esempio e di aggiungere la tua dipendenza di terze parti a quello, puoi eseguire quanto segue per vedere la gerarchia completa delle dipendenze.

Puoi cercare un artefatto specifico usando questo comando Maven:

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

Secondo la documentazione:

dove ogni segmento del pattern è opzionale e supporta caratteri jolly completi e parziali *. Un segmento di pattern vuoto viene considerato come un carattere jolly implicito.

Immagina di provare a trovare il file jar 'log4j-1.2-api' tra diversi moduli del tuo progetto:

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

ulteriori informazioni possono essere trovate qui .

Modifica: tieni presente che, nonostante i vantaggi dell'utilizzo di un parametro dettagliato , in alcune condizioni potrebbe non essere così preciso. Perché utilizza l'algoritmo di Maven 2 e può fornire risultati errati se utilizzato con Maven 3.


2
Ottimo suggerimento! -Dverboseera sufficiente per mostrarmi l'albero completo di cui avevo bisogno. Il piping dell'output lessao simile e una ricerca rapida funziona alla grande se non ricordi la includesbandiera o non vuoi fornire il carattere completo o jolly groupId:)
jocull

Questo non funziona senza un pom.xml presente che contiene il manufatto che stai guardando. Altrimenti ottieni[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 è stato deprecato nel plug-in delle dipendenze, quindi non funziona più a meno che non si utilizzi una versione piuttosto vecchia.
toolforger

6

La soluzione è chiamare dependency: tree con il file pom.xml dell'artefatto:

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

Vedi anche Come elencare le dipendenze transitive di un artefatto da un repository?


Potrebbe non funzionare con gli artefatti scaricati da un repository centrale, a causa di "distributionManagement.status". Viene aggiunto dal repository centrale al momento del caricamento. E questo creerà dipendenza: convalida fallita dell'albero sul file pom. Vedi issues.apache.org/jira/browse/MNG-3178
Arnaud Jeansen

2

Se usi una versione corrente di m2eclipse (cosa che dovresti fare se usi eclipse e maven):

Seleziona la voce di menu

Navigate -> Open Maven POM

ed inserisci il manufatto che stai cercando.

Il pom si aprirà nell'editor pom, da cui è possibile selezionare la scheda Dependency Hierarchyper visualizzare la gerarchia delle dipendenze (come suggerisce il nome :-))


2
OK, questa risposta è per altri utenti :-)
Sean Patrick Floyd

1

Se il tuo artefatto non è una dipendenza di un determinato progetto, la soluzione migliore è utilizzare un motore di ricerca del repository . Molti di loro descrivono le dipendenze di un dato artefatto.


i manufatti che mi interessano fanno parte di un prodotto aziendale
IttayD

allora la risposta di Amra è la soluzione migliore, temo.
Sean Patrick Floyd,

@IttayD: Perché non citi questo tipo di dettaglio importante nella tua domanda? Ciò aiuterebbe a ottenere risposte migliori IMHO (e potrebbe anche aiutare i lettori a non sprecare il loro tempo).
Pascal Thivent

0

Se desideri ottenere una rappresentazione grafica e ricercabile dell'albero delle dipendenze (inclusi tutti i moduli del tuo progetto, dipendenze transitive e informazioni di eliminazione), controlla UpdateImpact: https://app.updateimpact.com (servizio gratuito).

Disclaimer: sono uno degli sviluppatori del sito


0

So che questo post è piuttosto vecchio, ma comunque, se qualcuno che utilizza IntelliJ desidera vedere l'albero delle dipendenze direttamente nell'IDE, può installare il plug-in Maven Helper Plugin .

Una volta installato, apri pom.xml e sarai in grado di vedere la scheda Analizza dipendenza come sotto. Fornisce anche l'opzione per vedere la dipendenza che è in conflitto solo e anche come una struttura ad albero.

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.