Как получить дерево зависимостей для артефакта?

123

dependency:treeможно использовать для просмотра дерева зависимостей для данного проекта. Но мне нужно увидеть дерево зависимостей для стороннего артефакта.

Думаю, я могу создать пустой проект, но я ищу что-нибудь попроще (мне нужно сделать это для нескольких артефактов).

IttayD
источник

Ответы:

158

1) Используйте плагин зависимости maven

Создайте простой проект, используя только pom.xml. Добавьте свою зависимость и запустите:

mvn dependency:tree

К сожалению, mojo зависимости должен использовать pom.xml, иначе вы получите следующую ошибку:

Невозможно выполнить mojo: tree. Требуется проект с существующим pom.xml, но сборка его не использует.

2) Найдите pom.xml вашего артефакта в центральном репозитории maven

Зависимости описаны в pom.xml вашего артефакта. Найдите его с помощью инфраструктуры maven.

Перейдите на http://search.maven.org/ и введите свой groupId и artifactId.

Или вы можете перейти на http://repo1.maven.org/maven2/ и сначала использовать подключаемый модуль groupId, затем использовать artifactId и, наконец, использовать его версию.

Например, см. Org.springframework: spring-core

3) Используйте плагин зависимости maven от вашего артефакта

Часть артефакта зависимости - это файл pom.xml. Это указывает на его зависимость. И вы можете выполнить mvn dependency: tree на этом pom.

Амра
источник
3
Как я уже сказал, я хочу избежать необходимости создавать проект
IttayD
вы не «создаете» проект, вы просто загружаете файл POM.
Шон Патрик Флойд
1
Вам не нужно создавать новый проект. Просто загляните в свой локальный репозиторий и найдите файл pom.xml атфакта
Амра
Это не работает, если дочерний модуль не существует. например, `` 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] Сканирование проектов ... [ERROR] [ERROR] При обработке POM возникли некоторые проблемы: [ERROR] Дочерний модуль ~ / .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 не есть ''
Дин-И Чен
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:)
jocull
Это не работает без наличия 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]
Eisenknurr
-Dverbose устарел в плагине зависимостей, поэтому он больше не работает, если вы не используете довольно старую версию.
toolforger
6

Решение - вызвать dependency: tree с файлом pom.xml артефакта:

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

См. Также Как составить список транзитивных зависимостей артефакта из репозитория?

Маттиас М
источник
Это может не работать с артефактами, загруженными из центрального репозитория из-за «distributionManagement.status». Он добавляется центральным репозиторием при загрузке. И это создаст зависимость: проверка дерева сбой в файле pom. См. Issues.apache.org/jira/browse/MNG-3178.
Арно Жансен,
2

Если вы используете текущую версию m2eclipse (что вам нужно, если вы используете eclipse и maven):

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

Navigate -> Open Maven POM

и введите артефакт, который вы ищете.

Pom откроется в редакторе pom, в котором вы можете выбрать вкладку Dependency Hierarchyдля просмотра иерархии зависимостей (как следует из названия :-))

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

Если ваш артефакт не является зависимостью данного проекта, лучше всего использовать поисковую систему репозитория . Многие из них описывают зависимости данного артефакта.

Паскаль Тивент
источник
интересующие меня артефакты являются частью продукта компании
IttayD
тогда, боюсь, ответ Амры - ваш лучший выбор.
Шон Патрик Флойд
@IttayD: Почему вы не упоминаете такую важную деталь в своем вопросе? Это поможет получить более точные ответы, ИМХО (а также может помочь читателям не тратить зря время).
Pascal Thivent
0

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

Отказ от ответственности: я один из разработчиков сайта

adamw
источник
0

Я знаю, что этот пост довольно старый, но все же, если кто-то, использующий IntelliJ, хочет видеть дерево зависимостей непосредственно в IDE, он может установить плагин Maven Helper. .

После установки откройте pom.xml, и вы сможете увидеть вкладку Dependency Analyze, как показано ниже. Он также предоставляет возможность видеть только конфликтующие зависимости, а также в виде древовидной структуры.

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

RNS
источник