2012-02-02 136 views
21

我正在做一些脚本,我需要得到任何给定的pom的所有父poms的列表。依赖项插件似乎只对在pom依赖项部分列出的依赖关系感兴趣,但似乎没有办法显示父poms,这也是Maven工作所需的依赖关系。如何显示Maven POM层次结构?

我缺少一些基本的东西吗?

回答

22

没有简单的Maven命令可以显示pom.xml的父POM链。原因是这不是人们通常会问的一个常见问题(更多关于下面的问题)。对于你的脚本,你只需要解析pom.xml文件,获取父工件坐标,获取工件的pom.xml文件,然后解析它的pom.xml文件(并重复)。对不起,但我知道没有捷径,但是。

你是对的在技术上父pom是你的项目的依赖项,但它不是一个字面Maven依赖项,处理完全不同。家长poms连同活动配置文件,您的settings.xml文件以及安装目录中的Maven超级pom全部组合在一起,以创建您的项目的有效pom的。有效的POM是Maven真正用来完成其工作的。所以基本上,在依赖插件(或任何其他插件)甚至被激活之前,父pom继承链已经被解析和合并。

大多数人通常会问的问题是'我的REAL pom.xml 真的看起来像什么时候Maven结合了所有东西?或者“我的父母团队的继承链是什么结果?”或'我的pom.xml属性如何受到活动配置文件的影响?'有效的pom会告诉你所有这一切。

我知道你没有问过,但对于其他读者来说,如果你想看到你的父pom.xml,只需打开M2Eclipse POM编辑器中的pom.xml,然后单击上面的父工件链接概览选项卡。通过这种方式,您可以快速向上移动pom.xml文件链,只需单击一下即可。这将是一个奇怪的项目,有超过3或4个父母的继承权。

如果你想看到你的有效pom,你可以运行命令mvn help:effective-pom。或者,您可以在M2Eclipse的POM编辑器中单击Effective POM选项卡。

+0

伟大的答案,谢谢!在发布这个问题后的几天里,我没有看到任何回应,我写了一个java util来使用Maven的'maven-model'库来给我提供信息。 Model对象(一个POM实例)有一个getParent()方法,允许我递归读取树。 – Todd 2012-03-15 18:37:28

7

,基本解决方案

mvn dependency:display-ancestors

将显示父母是这样的:

[INFO] Ancestor POMs: org.springframework.boot:spring-boot-starter-parent:1.4.0.RELEASE <- org.springframework.boot:spring-boot-dependencies:1.4.0.RELEASE

它需要依赖插件的2.9+版本。如果你的插件是老年人和因任何原因,你不能更新,然后拨打:

mvn org.apache.maven.plugins:maven-dependency-plugin:2.9:display-ancestors 

改进方案

的层次,Maven的插件(我写),可以显示有关进口劲歌其他信息像这样:

[INFO] Displaying hierarchy. Set level=full to display dependencies in dependencyManagement 
[INFO] PARENT org.springframework.boot:spring-boot-samples:1.4.1.BUILD-SNAPSHOT 
[INFO] PARENT org.springframework.boot:spring-boot-starter-parent:1.4.1.BUILD-SNAPSHOT 
[INFO]  PARENT org.springframework.boot:spring-boot-dependencies:1.4.1.BUILD-SNAPSHOT 
[INFO]  IMPORT org.springframework:spring-framework-bom:4.3.3.BUILD-SNAPSHOT 
[INFO]  IMPORT org.springframework.data:spring-data-releasetrain:Hopper-BUILD-SNAPSHOT 
[INFO]   PARENT org.springframework.data.build:spring-data-build:1.8.4.BUILD-SNAPSHOT 
[INFO]  IMPORT org.springframework.integration:spring-integration-bom:4.3.1.RELEASE 
[INFO]  IMPORT org.springframework.security:spring-security-bom:4.1.3.RELEASE 

详情请看这里:https://github.com/ExampleDriven/hierarchy-maven-plugin

+1

请注意,您需要至少v2.9的依赖项插件才能实现该目标:https://maven.apache.org/plugins/maven-dependency-plugin/display-ancestors-mojo.html – mac 2017-01-08 05:30:26