如何在聚合器POM中指定maven属性?

时间:2015-07-18 05:04:07

标签: java maven

我有一个类似于下面的项目结构。在聚合器中,POM project1和项目2被定义为modules.Now如果我想添加一个可以在所有项目中访问的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)

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

2 个答案:

答案 0 :(得分:-1)

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

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

编辑:

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

我知道实现你想要的唯一解决方案是将属性存储在父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>

PROJECT1

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

Project2的

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

答案 1 :(得分:-1)

这是聚合器的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由子级继承。