Jak zdobyć drzewo zależności dla artefaktu?

123

dependency:treemożna użyć do wyświetlenia drzewa zależności dla danego projektu. Ale potrzebuję zobaczyć drzewo zależności dla artefaktu innej firmy.

Myślę, że mogę stworzyć pusty projekt, ale szukam czegoś łatwiejszego (muszę to zrobić dla kilku artefaktów).

IttayD
źródło

Odpowiedzi:

158

1) Użyj wtyczki zależności maven

Utwórz prosty projekt tylko z pom.xml. Dodaj swoją zależność i uruchom:

mvn dependency:tree

Niestety zależność mojo musi używać pom.xml lub pojawia się następujący błąd:

Nie można wykonać mojo: tree. Wymaga projektu z istniejącym pom.xml, ale kompilacja go nie używa.

2) Znajdź pom.xml swojego artefaktu w centralnym repozytorium maven

Zależności są opisane w pom.xml twojego artefaktu. Znajdź go za pomocą infrastruktury maven.

Przejdź do http://search.maven.org/ i wprowadź swój groupId oraz artifactId.

Lub możesz przejść do http://repo1.maven.org/maven2/ i nawigować najpierw za pomocą plugins groupId, później używając artifactId i wreszcie używając jego wersji.

Na przykład zobacz org.springframework: spring-core

3) Użyj wtyczki zależności maven przeciwko artefaktowi

Częścią artefaktu zależności jest plik pom.xml. To określa jego zależność. I możesz wykonać zależność mvn: tree na tym pom.

amra
źródło
3
Jak powiedziałem, chcę uniknąć konieczności tworzenia projektu
IttayD
nie „tworzysz” projektu, po prostu pobierasz plik POM.
Sean Patrick Floyd
1
Nie musisz tworzyć nowego projektu. Po prostu zajrzyj do lokalnego repozytorium i znajdź plik pom.xml atefaktu
amra
To nie działa, jeśli moduł potomny nie istnieje. np. `` 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] Trwa skanowanie projektów ... [ERROR] [ERROR] Napotkano pewne problemy podczas przetwarzania POM: [ERROR] Moduł potomny ~ / .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 nie istnieje ``
Ding-Yi Chen
1
W przypadku wielomodułowego projektu Maven (tj. Projektu z kilkoma pom.xmlplikami) może wystąpić błąd. Spróbuj mvn compile dependency:treewięc.
izogfif
49

Jeśli zawracasz sobie głowę tworzeniem przykładowego projektu i dodaniem do niego zależności od innej firmy, możesz uruchomić następujące czynności, aby zobaczyć pełną hierarchię zależności.

Możesz wyszukać konkretny artefakt za pomocą tego polecenia maven:

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

Zgodnie z dokumentacją:

gdzie każdy segment wzoru jest opcjonalny i obsługuje pełne i częściowe * symbole wieloznaczne. Pusty segment wzoru jest traktowany jako niejawny symbol wieloznaczny.

Wyobraź sobie, że próbujesz znaleźć plik jar „log4j-1.2-api” w różnych modułach projektu:

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

więcej informacji można znaleźć tutaj .

Edycja: pamiętaj, że pomimo zalet używania parametru pełnego , może nie być tak dokładny w niektórych warunkach. Ponieważ używa algorytmu Maven 2 i może dawać nieprawidłowe wyniki, gdy jest używany z Maven 3.

Kayvan Tehrani
źródło
2
Świetna sugestia! -Dverbosewystarczyło, aby pokazać mi całe drzewo, którego potrzebowałem. Przekierowanie wyjścia do lesslub includesczegoś podobnego i wykonanie szybkiego wyszukiwania działa świetnie, jeśli nie pamiętasz flagi lub nie chcesz podawać pełnej lub wieloznacznej groupId:)
żart,
To nie działa bez prezentu pom.xml, który zawiera artefakt, na który patrzysz. W przeciwnym razie otrzymasz[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 zostało wycofane we wtyczce zależności, więc to już nie działa, chyba że używasz dość starej wersji.
toolforger
6

Rozwiązaniem jest wywołanie zależności: drzewo z plikiem pom.xml artefaktu:

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

Zobacz także Jak wyświetlić listę zależności przechodnich artefaktu z repozytorium?

Matthias M.
źródło
Może to nie działać w przypadku artefaktów pobranych z centralnego repozytorium z powodu „distributionManagement.status”. Jest dodawany przez centralne repozytorium podczas przesyłania. A to spowoduje zależność: sprawdzanie poprawności niepowodzenia drzewa w pliku pom. Zobacz issue.apache.org/jira/browse/MNG-3178
Arnaud Jeansen
2

Jeśli używasz aktualnej wersji m2eclipse (co powinieneś zrobić, jeśli używasz eclipse i maven):

Wybierz pozycję menu

Navigate -> Open Maven POM

i wejdź do poszukiwanego artefaktu.

Pom otworzy się w edytorze pom, z którego możesz wybrać zakładkę, Dependency Hierarchyaby wyświetlić hierarchię zależności (jak sugeruje nazwa :-))

Sean Patrick Floyd
źródło
2
OK, to ta odpowiedź jest dla innych użytkowników :-)
Sean Patrick Floyd
1

Jeśli twój artefakt nie jest zależny od danego projektu, najlepiej jest skorzystać z wyszukiwarki repozytorium . Wiele z nich opisuje zależności danego artefaktu.

Pascal Thivent
źródło
artefakty, którymi jestem zainteresowany, są częścią produktu firmy
IttayD
obawiam się, że odpowiedź Amry jest najlepszym rozwiązaniem.
Sean Patrick Floyd
@IttayD: Dlaczego nie wspomnisz o tego rodzaju ważnych szczegółach w swoim pytaniu? Pomogłoby to w uzyskaniu lepszych odpowiedzi IMHO (a także mogłoby pomóc czytelnikom nie marnować czasu).
Pascal Thivent
0

Jeśli chcesz uzyskać graficzną reprezentację drzewa zależności z możliwością wyszukiwania (w tym wszystkie moduły z projektu, zależności przechodnie i informacje o eksmisji), sprawdź UpdateImpact: https://app.updateimpact.com (bezpłatna usługa).

Zastrzeżenie: jestem jednym z twórców strony

adamw
źródło
0

Wiem, że ten post jest dość stary, ale mimo to, jeśli ktoś używający IntelliJ chce zobaczyć drzewo zależności bezpośrednio w IDE, może zainstalować wtyczkę Maven Helper Plugin .

Po zainstalowaniu otwórz pom.xml i zobaczysz zakładkę Analiza zależności , jak poniżej. Zapewnia również opcję zobaczenia zależności, które są w konflikcie, a także jako struktury drzewa.

wprowadź opis obrazu tutaj

rns
źródło