在多模块Maven项目中更新模块的版本号,其中聚合根不是父pom

时间:2017-02-04 10:29:55

标签: java maven multi-module

我想为我的项目设置发布版本。我为所有模块使用聚合pom。每个模块父级都不是之前提到的聚合pom。

我的问题与Updating version numbers of modules in a multi-module Maven project问题不同,聚合pom也是父母pom。

聚合pom.xml是:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>aggregate</artifactId>
    <version>0.0.1</version>
    <packaging>pom</packaging>

    <modules>
        <module>module1</module>
    </modules>

</project>

module1 pom.xml的位置是:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>module-1</artifactId>
    <version>1.0-SNAPSHOT</version>

    <parent>
        <groupId>com.example</groupId>
        <artifactId>parent1</artifactId>
        <version>1.0-SNAPSHOT</version>
        <relativePath>../../parent1/pom.xml</relativePath>
    </parent>

</project>

执行时:

mvn versions:set -DnewVersion=0.0.1

[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] module-1
[INFO] aggregate
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building aggregate 0.0.1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- versions-maven-plugin:2.3:set (default-cli) @ aggregate ---
[INFO] Searching for local aggregator root...
[INFO] Local aggregation root: C:\Users\maxim.kirilov\workspace\maven-games\aggregate
[INFO] Processing change of com.example:aggregate:0.0.1 -> 0.0.1
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] module-1 ........................................... SKIPPED
[INFO] aggregate .......................................... SUCCESS [  0.962 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS

为什么跳过模块1?我读了一些文章,建议分别为每个模块调用maven set version命令,maven是否支持更清洁的解决方案?

2 个答案:

答案 0 :(得分:2)

最近(2017年9月23日)一个文档被添加到Versions Maven Plugin。要更新聚合项目下的所有项目,您需要添加补充命令行参数:

mvn versions:set -DnewVersion=0.0.1 -DoldVersion=* -DgroupId=* -DartifactId=*

这是必需的,否则版本的过滤器(通过-DoldVersion = )将过滤掉该模块,因为它具有与其余模块不同的版本。此外,您需要添加-DgroupId = 和-DartifactId = *,否则 module-1 也将根据groupId和artifactId的差异进行过滤。

答案 1 :(得分:-1)

您可能需要在聚合pom xml中包含Versions Maven插件。 http://www.mojohaus.org/versions-maven-plugin/ http://www.mojohaus.org/versions-maven-plugin/usage.html

我喜欢这样的事情:

 <plugins>
    <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>versions-maven-plugin</artifactId>
      <version>2.3</version>
      <configuration>
     <autoVersionSubmodules>true</autoVersionSubmodules>
     </configuration>
    </plugin>
 </plugins>