Як отримати дерево залежності для артефакту?


123

dependency:treeможна використовувати для перегляду дерева залежностей для даного проекту. Але мені потрібно бачити дерево залежності від артефакту сторонніх виробників.

Напевно, я можу створити порожній проект, але шукаю щось легше (мені потрібно це зробити для кількох артефактів).

Відповіді:


158

1) Використовуйте плагін залежності maven

Створіть простий проект лише з pom.xml. Додайте залежність і запустіть:

mvn dependency:tree

На жаль, моджо залежність повинна використовувати pom.xml або ви отримаєте таку помилку:

Неможливо виконати mojo: tree. Для цього потрібен проект із наявним pom.xml, але збірка не використовує.

2) Знайдіть pom.xml свого артефакту в центральному сховищі Maven

Залежності описані в pom.xml вашого артефакту. Знайдіть його за допомогою інфраструктури Maven.

Перейдіть на сторінку http://search.maven.org/ та введіть свою групу ID та артефакти.

Або ви можете перейти на http://repo1.maven.org/maven2/ і перейти спочатку за допомогою плагінів groupId, пізніше за допомогою artefactId і, нарешті, за допомогою його версії.

Наприклад, див. Org.springframework: spring-core

3) Використовуйте плагін залежно від артефакту

Частина артефакту залежності - пом.xml. Це вказує, що це залежність. І ви можете виконати mvn залежність: дерево на цьому пом.


3
Як я вже говорив, я хочу уникнути необхідності створювати проект
IttayD

ви не створюєте проект, ви просто завантажуєте файл POM.
Шон Патрік Флойд

1
Вам не доведеться створювати новий проект. Просто загляньте у своє місцеве сховище та знайдіть pom.xml atifact
amra

Це не працює, якщо дочірнього модуля не існує. наприклад, `` `mvn -f ~ / .m2 / repository / org / jboss / shrinkwrap / дескриптори / shrinkwrap-descripts-parent / 2.0.0-alpha-10 / shrinkwrap-descripts-parent-2.0.0-alpha-10. pom depen dency: tree [ІНФОРМАЦІЯ] Сканування проектів ... [ПОМИЛКА] [ПОМИЛКА] У процесі обробки ПОМ виникли деякі проблеми: [ПОМИЛКА] Дочірній модуль ~ / .m2 / сховище / org / jboss / shrinkwrap / дескриптори / shrinkwrap -descriptors-parent / 2.0.0-alpha-10 / api-база ... / дескриптори-батьківські / 2.0.0-альфа-10 / термоусадочні-дескриптори-батьківські-2.0.0-альфа-10.пом не існують `` `
Ding-Yi Chen

1
Для багатомодульного проекту Maven (тобто проекту з декількома pom.xmlфайлами) ви можете отримати помилку. Спробуйте mvn compile dependency:treeпотім.
izogfif

49

Якщо ви переймаєтеся створенням зразкового проекту та додаєте до цього свою сторонній залежність, тоді можете виконати наступне, щоб побачити повну ієрархію залежностей.

Ви можете шукати конкретний артефакт за допомогою команди Maven:

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

Відповідно до документації:

де кожен сегмент візерунка необов’язковий і підтримує повну та часткову * підстановку. Порожній сегмент візерунка трактується як неявна підстановка.

Уявіть, що ви намагаєтесь знайти файл jar-файлу 'log4j-1.2-api' серед різних модулів вашого проекту:

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

більше інформації можна знайти тут .

Редагувати: Зауважте, що незважаючи на переваги використання багатослівного параметра, він може бути не таким точним у деяких умовах. Оскільки він використовує алгоритм Maven 2 і може давати неправильні результати при використанні з Maven 3.


2
Чудова пропозиція! -Dverboseбуло достатньо, щоб показати мені повне дерево, яке мені потрібно. Підключення виводу до lessподібного або швидкого пошуку працює чудово, якщо ви не можете запам'ятати includesпрапор або не хочете надати повний або groupId
підкреслений

Це не працює без присутнього pom.xml, який містить артефакт, який ви шукаєте. Інакше ви отримуєте[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]
Айзенкнурр

-Двербоза застаріла в плагіні залежності, тому це більше не працює, якщо ви не використовуєте досить стару версію.
інструментарій

6

Рішення полягає в виклику залежності: дерево з файлом pom.xml артефакту:

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

Див. Також Як перелічити перехідні залежності артефакту від сховища?


Це може не працювати з артефактами, завантаженими з центрального сховища, через "distributionManagement.status". Він додається центральним сховищем при завантаженні. І це зробить залежність: дерево не вдасться перевірити файл pom. Див. Issues.apache.org/jira/browse/MNG-3178
Arnaud Jeansen

2

Якщо ви використовуєте поточну версію m2eclipse (що вам слід, якщо ви використовуєте eclipse і maven):

Виберіть пункт меню

Navigate -> Open Maven POM

і введіть шуканий артефакт.

Пом відкриється в редакторі пом, з якого ви можете вибрати вкладку Dependency Hierarchyдля перегляду ієрархії залежностей (як випливає з назви :-))


2
Гаразд, тоді ця відповідь призначена для інших користувачів :-)
Шон Патрік Флойд

1

Якщо ваш артефакт не є залежним від конкретного проекту, найкраще скористатись пошуковою системою сховища . Багато з них описують залежності певного артефакту.


артефакти, які мене цікавлять, є частиною продукту компанії
IttayD

то я боюся, що відповідь амри - це найкраща ставка.
Шон Патрік Флойд

@IttayD: Чому ви не згадаєте про таку важливу деталь у своєму питанні? Це допоможе отримати кращі відповіді на ІМХО (а також може допомогти читачам не витрачати свій час).
Паскаль Thivent

0

Якщо ви хочете отримати графічне представлення дерева залежностей (у тому числі всіх модулів вашого проекту, перехідних залежностей та інформації про виселення), ознайомтеся з UpdateImpact: https://app.updateimpact.com (безкоштовна послуга).

Відмова: Я один із розробників сайту


0

Я знаю, що цей пост досить старий, але все ж, якщо хтось, хто використовує IntelliJ, хоче бачити дерево залежності безпосередньо в IDE, то він може встановити плагін Maven Helper Plugin .

Після встановлення відкрийте pom.xml і ви зможете побачити вкладку Аналіз залежності , як показано нижче. Він також надає можливість бачити залежність, яка конфліктує лише, а також як структуру дерева.

введіть тут опис зображення

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.