【问题标题】:Maven: Why deploy an aggregating POM?Maven:为什么要部署聚合 POM?
【发布时间】:2014-04-27 05:23:46
【问题描述】:

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

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

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

根 pom.xml 只是为了允许一键构建和部署所有模块,所以它有包装 pom 并列出所有模块。

当我在根 pom 上调用“部署”时,所有构建和部署都很好,但最后,根项目本身失败了(因为它缺少 distributionManagement 元素)。

为什么 Maven 想要构建和部署那个根 pom?据我了解,这只是构建所有模块的某种捷径。真的没有什么可部署的,或者里面没有项目相关的数据。

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

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

【问题讨论】:

    标签: maven inheritance pom.xml aggregation


    【解决方案1】:

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

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

    但是,我也会简单地部署它。给它一些有意义的坐标(我们使用类似com.mycorp.aggregator-only:xy-aggregator:0-SNAPHSHOT的东西)。 SNAPSHOT 版本很重要,否则,您的工件存储库会阻止重复构建。

    【讨论】:

      【解决方案2】:

      当您在该级别运行 mvn clean deploy 时,您会告诉 maven 构建该项目 POM。它恰好包含子模块,因此您不应该(而且我不知道有一种方法可以)避免部署该 POM。

      只需让 pom 从父级继承,并让所有子模块都从该 POM 继承,而不是直接从父级继承。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-12
        • 1970-01-01
        • 2014-07-03
        • 2018-06-07
        • 2012-06-26
        • 1970-01-01
        • 1970-01-01
        • 2012-02-23
        相关资源
        最近更新 更多