如何获得工件的依赖树?


123

dependency:tree可用于查看给定项目的依赖关系树。但是我需要的是查看第三者工件的依赖关系树。

我想我可以创建一个空项目,但是我正在寻找更简单的方法(我需要针对多个工件进行此操作)。

Answers:


158

1)使用Maven依赖插件

仅使用pom.xml创建一个简单项目。添加您的依赖项并运行:

mvn dependency:tree

不幸的是,依赖mojo必须使用pom.xml,否则会出现以下错误:

无法执行mojo:树。它需要一个具有现有pom.xml的项目,但是构建未使用该项目。

2)在Maven中央存储库中找到工件的pom.xml

依赖关系在工件的pom.xml中描述。使用Maven基础架构找到它。

转到http://search.maven.org/并输入您的groupId和artifactId。

或者,您可以转到http://repo1.maven.org/maven2/并首先使用插件groupId导航,然后使用artifactId导航,最后使用其版本。

例如,参见org.springframework:spring-core

3)对您的工件使用Maven依赖插件

依赖项工件的一部分是pom.xml。那指定了它的依赖性。您可以在此pom上执行mvndependency:tree


3
就像我说的,我想避免创建项目的需要
IttayD 2010年

您不是在“创建”项目,而是在下载POM文件。
肖恩·帕特里克·弗洛伊德

1
您不必创建新项目。只需查看您的本地存储库,然后找到atifact的pom.xml
2010年

如果子模块不存在,这将不起作用。例如```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 [信息]扫描项目... [错误] [错误]处理POM时遇到一些问题:[错误]子模块〜/ .m2 / repository / org / jboss / shrinkwrap / descriptors / shrinkwrap -descriptors-parent / 2.0.0-alpha-10 /.../ descriptors-parent / 2.0.0-alpha-10 / shrinkwrap-descriptors-parent-2.0.0-alpha-10.pom的api-base不会存在```
陈鼎一

1
对于多模块Maven项目(即具有多个pom.xml文件的项目),您可能会遇到错误。mvn compile dependency:tree然后尝试。
izogfif

49

如果您不愿意创建一个示例项目并向其中添加第3方依赖关系,则可以运行以下命令以查看依赖关系的完整层次结构。

您可以使用以下maven命令搜索特定的工件

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

根据文档:

其中每个模式段都是可选的,并支持完整和部分*通配符。空模式段被视为隐式通配符。

想象一下,您正在尝试在项目的不同模块之间查找“ log4j-1.2-api” jar文件:

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



1

如果您的工件不是给定项目的依赖项,那么最好的选择是使用存储库搜索引擎。其中许多描述了给定工件的依赖性。


我感兴趣的工件是公司产品的一部分
IttayD 2010年

恐怕Amra的答案是最好的选择。
肖恩·帕特里克·弗洛伊德

@IttayD:为什么不在您的问题中提到这种重要的细节?这将有助于获得更好的答案恕我直言(也可能有助于读者不要浪费时间)。
Pascal Thivent

0

如果您想获得依赖关系树的图形化,可搜索的表示形式(包括项目中的所有模块,可传递依赖关系和收回信息),请查看UpdateImpact:https ://app.updateimpact.com (免费服务)。

免责声明:我是该网站的开发人员之一


0

我知道这篇文章已经很老了,但是,如果任何使用IntelliJ的人都想直接在IDE中查看依赖树,那么他们可以安装Maven Helper Plugin插件。

安装完成后,打开pom.xml,您将能够看到如下所示的Dependency Analyze选项卡。它还提供选项以查看仅冲突的依赖关系,也可以将其视为树结构。

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.