Maven:为什么要部署聚合POM?

时间:2014-03-20 11:35:21

标签: maven inheritance pom.xml aggregation

在我的Maven设置中,我有以下目录结构

.
|-- parent
|   `-- pom.xml
|-- module1
|   |-- src...
|   `-- pom.xml 
|-- more modules...
`-- pom.xml

每个模块的pom都有parent/pom.xml作为父级,重新组合一般信息(例如distributionManagement

root pom.xml只允许一键构建&部署所有模块,因此它具有打包pom并列出所有模块。

当我致电"部署"在根pom上,所有构建和部署都很好,但最后,根本项目本身失败(因为它没有distributionManagement元素)。

为什么Maven想要构建和部署根pom?根据我的理解,它只是构建所有模块的某种捷径。实际上没有什么可以部署或没有项目相关数据。

我可以而且应该尽量避免部署那个pom吗?

注意:将distributionManagement添加到根pom或使root pom继承自parent / pom.xml的解决方法是构建问题的解决方案 - 我现在对此更感兴趣了解这是否真的有必要以及为什么。

2 个答案:

答案 0 :(得分:2)

如果您的根pom在您的功能模块的祖先中没有(即您的父级没有root作为其父级),那么您可以通过将maven.deploy.skip属性设置为{{1来跳过聚合器的部署在你的根pom里面。

这样,将跳过root的部署(但它仍然是“构建的”)。

但是,我也会简单地部署它。给它一些有意义的坐标(我们使用true之类的东西)。 SNAPSHOT版本很重要,因为否则,您的工件存储库会阻止重复构建。

答案 1 :(得分:1)

当您在该级别运行mvn clean deploy时,您要告诉maven构建该项目POM。它恰好包含子模块,所以你不应该(并且我不知道一种方法)避免部署那个POM。

只需让pom从父级继承并使所有子模块继承自该POM而不是父级。