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).

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.


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.


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?


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 :-))


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.


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


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.