我正在做一些脚本,我需要获得任何给定pom的所有父pom的列表。依赖插件似乎只对pom的依赖项部分中列出的依赖项感兴趣,但似乎没有办法显示父poms,这也是Maven工作所需的依赖项。
我错过了一些基本的东西吗?
答案 0 :(得分:23)
没有简单的Maven命令可以显示pom.xml的父POM链。这样做的原因是它不是人们通常会问的常见问题(下面将详细介绍)。对于您的脚本,您只需要解析pom.xml文件,获取父工件坐标,获取工件的pom.xml文件,然后解析它的pom.xml文件(并重复)。对不起,但我知道没有捷径,但other folks have solved similar problems。
你是对的技术上父pom是你项目的依赖项,但它不是文字Maven依赖项,并且处理方式完全不同。父poms链以及活动配置文件,您的settings.xml
文件和安装目录中的Maven super pom都组合在一起,以创建项目的有效pom 。有效的POM是Maven真正用来完成它的工作。所以基本上,在依赖插件(或任何其他插件)被激活之前,父pom继承链已经被解析和组合。
大多数人通常会问的问题是“当Maven完成所有内容时,我的REAL pom.xml 真正是什么样的?”或者“父母poms的继承链是什么结果?”或者'我的pom.xml属性如何受到活动配置文件的影响?'有效的pom会告诉你所有这些。
我知道你没有问,但是对于其他人来说,如果你想看到你的父pom.xml,只需打开M2Eclipse POM编辑器中的pom.xml,然后点击概述上的父工件链接标签。通过这种方式,您只需单击每个pom即可快速向上移动pom.xml文件链。这将是一个奇怪的项目,有超过3或4个父遗产的poms。
如果您想查看有效的pom,可以运行命令mvn help:effective-pom
。或者,您可以单击M2Eclipse的POM编辑器中的Effective POM选项卡。
答案 1 :(得分:8)
基本解决方案
mvn org.apache.maven.plugins:maven-dependency-plugin:3.1:display-ancestors
如果您的项目定义了3.1或更高版本,则可以使用:
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
改进的解决方案
hierarchy-maven-plugin(我写的)可以显示有关导入poms的其他信息,如下所示:
[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