借用类似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
答案 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