【问题标题】:How to specify maven properties in a aggregator POM?如何在聚合器 POM 中指定 Maven 属性?
【发布时间】:2015-07-18 05:04:06
【问题描述】:

我有一个如下所示的项目结构。在聚合器中,POM 项目 1 和项目 2 被定义为模块。现在,如果我想添加一个可以在所有项目中访问的 maven 属性,我该怎么做? 在这种情况下,最好的项目结构是什么?

如果我在聚合器 POM 中定义像 <temp.dir>data</temp.dir> 这样的属性,那么它在 project1 pom.xml 和 project2 POM.xml 中不可用。我必须在两个 POM 中复制相同的属性。

project
- project1
- - pom.xml  ---- has parent POM as project A
- project2
- - pom.xml  --- has parent POM as project B
- pom.xml (Aggregator POM)

更新:澄清更多项目1 pom和项目2有不同的父POM。所以聚合器POM不能设置为父。

【问题讨论】:

    标签: java maven


    【解决方案1】:

    您需要将聚合器 pom 设置为 project1project2 的父级。 例如。在project1project2 poms 添加:

    <parent>
        <groupId>com.agr</groupId>
        <artifactId>project-aggregator</artifactId>
        <version>1.0.0</version>
    </parent>
    

    编辑:

    我知道 project1 和 project2 有不同的父 pom。

    我知道实现您想要的唯一解决方案是将属性存储在父 pom 中。

    我只能想到一个解决方案,创建一个继承链:

    Project2Parent:

    <parent>
        <groupId>com.test</groupId>
        <artifactId>Project1Parent</artifactId>
        <version>0.0.1</version>
    </parent>
    <artifactId>Project2Parent</artifactId>
    <version>0.0.1</version>
    

    聚合器:

    <parent>
        <groupId>com.test</groupId>
        <artifactId>Project2Parent</artifactId>
        <version>0.0.1</version>
    </parent>
    <artifactId>Aggregator</artifactId>
    <version>0.0.1</version>
    

    项目1

    <parent>
        <groupId>com.test</groupId>
        <artifactId>Aggregator</artifactId>
        <version>0.0.1</version>
    </parent>
    <artifactId>project1</artifactId>
    <version>0.0.1</version>
    

    项目2

    <parent>
        <groupId>com.test</groupId>
        <artifactId>Aggregator</artifactId>
        <version>0.0.1</version>
    </parent>
    <artifactId>project2</artifactId>
    <version>0.0.1</version>
    

    【讨论】:

    • 我无法将聚合器 POM 设置为父级,因为 project1 和 project2 具有不同的父级 POM。
    • 我用一个可以帮助实现你想要的东西的例子编辑了这篇文章,只有你可以修改其中的一个 ParentPoms。 Project2Parent pom
    • 这行得通吗?我的意思是现在他们仍然有相同的父母,(或更好的父母)这意味着 Parent2 会覆盖 Parent1
    • Parent2 不会覆盖 parent1 仅继承自它,project1 和 project2 将拥有 Parent1、Parent2 和 Aggregator 的所有属性。
    【解决方案2】:

    这里是聚合器的 pom:

    <groupId>y</groupId>
    <artifactId>y</artifactId>
    <version>0.0.1</version>
    <packaging>pom</packaging>
    <modules>
        <module>y1</module>
        <module>y2</module>
    </modules>
    <properties>
        <x>1</x>
    </properties>
    

    这是y1有效的pom(由Eclipse生成):

      <parent>
        <groupId>y</groupId>
        <artifactId>y</artifactId>
        <version>0.0.1</version>
      </parent>
      <groupId>y1</groupId>
      <artifactId>y1</artifactId>
      <version>0.0.1</version>
      <properties>
        <x>1</x>
      </properties>
    

    如您所见,父级中声明的属性x 被子级继承。

    【讨论】:

    • Y1 有另一个父 POM,因此无法将聚合器 POM 设置为父。
    猜你喜欢
    • 1970-01-01
    • 2011-07-26
    • 2018-08-24
    • 2011-05-12
    • 1970-01-01
    • 2014-09-21
    • 2012-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多