2017-02-04 92 views
0

我想爲我的項目設置發行版本。我爲所有模塊使用聚合體。每個模塊的父母不是前面提到的聚合體。更新聚合根不是父系統pom的多模塊Maven項目中模塊的版本號

我的問題不同於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> 

凡模塊1 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是否支持更清晰的解決方案?

回答

1

日前(23/09/2017)一個文檔中加入版本Maven插件。爲了更新下聚集的項目,您需要添加附加命令行參數的所有項目:

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

這是必需的,否則的版本過濾器(通過-DoldVersion = )會過濾掉該模塊導致它有與其餘模塊不同的版本。此外,您需要添加-DgroupId =和-DartifactId = *,否則模塊-1也將根據groupId和artifactId中的差異過濾掉。

-1

您可能需要在您的聚合pom xml中包含版本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> 
+0

我沒有在文檔中找到任何類似'autoVersionSubmodules'的配置?這隻在[maven-release-plugin](http://maven.apache.org/maven-release/maven-release-plugin/prepare-mojo.html)中可用,但不在[versions-maven-plugin]( http://www.mojohaus.org/versions-maven-plugin/) – khmarbaise

+0

建議您在第二個鏈接上進一步閱讀,如mvn-N版本:update-child-modules可能對您有所幫助。截至目前,您可以忽略autoVersionSubmodule,但我已經使用了兩個插件:releasr和帶有上述代碼的版本,它工作得很酷 – LNP

+0

autoVersionSubmodule不是一個配置項,它在versions-maven-plugin中可用。它僅在maven-release-plugin中可用。從版本 - maven插件它將被簡單地忽略。 – khmarbaise