maven多模块项目,覆盖父版本

时间:2014-09-22 19:18:20

标签: maven

借用类似question的示例,我有两个项目:父项目:A,子项目:B

在A / pom.xml中:

<groupId>com.dummy.bla</groupId>
<artifactId>parent</artifactId>
<version>2.0</version>
<packaging>pom</packaging>

在B / pom.xml中,我有:

<parent>
    <groupId>com.dummy.bla</groupId>
    <artifactId>parent</artifactId>
    <version>2.0</version>     
</parent>

<groupId>com.dummy.bla.sub</groupId>
<artifactId>kid</artifactId>

我按如下方式对B进行测试,

mvn test -pl B

是否可以覆盖父版本,如下所示?

mvn test -pl B -Dparent=1.0

1 个答案:

答案 0 :(得分:0)

您的父项目版本必须使用maven属性动态,然后您可以使用系统属性覆盖该属性。

所有子模块都必须继承父版本,不应定义它们,否则所有进程都将被破坏。

更新您的父项目描述符如下:

<project>
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.dummy.bla</groupId>
  <artifactId>parent</artifactId>
  <version>${project.custom.version}</version> <!-- Dynamic project version which defaults to 2.0 -->
  <packaging>pom</packaging>

  <name>parent</name>

  <properties>
    <project.custom.version>2.0</project.custom.version>
  </properties>

  <modules>
    <module>kid</module>
  </modules>
  <!-- ... -->
</project>

然后使用相同的动态版本在子模块中声明父项:

<project>
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.dummy.bla</groupId>
    <artifactId>parent</artifactId>
    <version>${project.custom.version}</version>
  </parent>
  <artifactId>kid</artifactId>
  <name>kid</name>
  <!-- ... -->
</project>

然后,命令行调用将使用版本声明或默认声明来执行此操作:

~ cd parent/
~ mvn -pl kid -Dproject.custom.version=3.1