在Maven项目中,如何自动更新所有子模块的版本以及父模块?

时间:2010-02-26 13:30:40

标签: maven-2 maven-release-plugin multi-module

我有一个多模块项目。

parent POM (1.0-SNAPSHOT)
|-- module1 (1.0-SNAPSHOT)
|-- module2 (1.0-SNAPSHOT)
`-- module3 (1.0-SNAPSHOT)

当我执行mvn release时:准备它验证父POM是否有SNAPSHOT版本,并且所有相关模块都没有SNAPSHOT版本。如何自动将所有子模块从SNAPSHOT更新到下一个发行版本?

我想自动增加所有模块的版本。

4 个答案:

答案 0 :(得分:30)

发布插件可以处理。你看过Updating POM Versions了吗?但... 我什么都没得到。 将POM中的版本从x-SNAPSHOT更改为新版本并将将POM中的版本更改为新值y-SNAPSHOT 应由{{1}完成}如Prepare a Release中所述。使用这个目标会出现什么问题?

更新 autoVersionSubmodules参数可能就是您要查找的内容。来自Prepare a Release示例:

  

多模块项目

     

系统将提示您输入该版本   项目每个模块的编号。   如果你更喜欢每个模块都有   与父POM版本相同,   你可以设置选项   release:prepareautoVersionSubmodules。轮到你了   只会被问一次   发布版本和下一个   开发版。

父pom.xml的片段

true

答案 1 :(得分:25)

设置poms版本,包括多模块项目的灵活方法是Versions Maven Plugin

mvn versions:set -DnewVersion=your_new_version

它将调整多模块项目中的所有pom版本,父版本和子版本。

然后

mvn versions:commit

mvn versions:revert

答案 2 :(得分:6)

  1. 在其父pom.xml中定义所有子项目的版本。
  2. 确保所有子项目版本与其父版本相同。

    <groupId>com.xyz</groupId>
    <artifactId>module-1</artifactId>
    <packaging>jar</packaging>
    
    <parent>
      <groupId>com.xyz</groupId>
      <artifactId>xyz-parent</artifactId>
      <version>1.0.123-SNAPSHOT</version>
    </parent>
    

    <?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/maven-v4_0_0.xsd">
    
      <modelVersion>4.0.0</modelVersion>
      <artifactId>xyz-parent</artifactId>
      <groupId>com.xyz</groupId>
      <version>1.0.123-SNAPSHOT</version>
      <packaging>pom</packaging>
      <name>xyz-parent</name>
    
      <dependencyManagement>
        <dependencies>
    
        <!-- Message -->
        <dependency>
          <groupId>com.xyz</groupId>
          <artifactId>module-1</artifactId>
          <version>${project.version}</version>
        </dependency>
    
        <dependency>
          <groupId>com.xyz</groupId>
          <artifactId>module-2</artifactId>
          <version>${project.version}</version>
        </dependency>
    
      </dependencyManagement>
    </project>
    
  3. 创建另一个pom.xml以将这些项目组合在一起。

    <modules>   
      <module>../xyz-parent</module>
      <module>../module-1</module>
      <module>../module-2</module>      
    </modules>
    
  4. 然后更新父项目的版本,然后通过以下命令构建它。

    mvn versions:set -DnewVersion=1.0.1004-SNAPSHOT
    mvn clean install
    
  5. 然后将在那些子项目中定义的父版本更新为latset

    mvn -N versions:update-child-modules
    
  6. 然后一起构建它们。

    @echo on
    cd   .\xyz-parent
    call mvn versions:set -DnewVersion=1.0.1004-SNAPSHOT -o
    call mvn versions:commit -o
    call mvn clean install -o
    :::http://www.mojohaus.org/versions-maven-plugin/examples/update-child-modules.html
    cd ..\xyz-buildaggregate-ide
    call mvn -N versions:update-child-modules -o
    call mvn clean install -o
    

答案 3 :(得分:3)

https://issues.apache.org/jira/browse/MNG-624?focusedCommentId=14415968&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-14415968

可能有更好的选择

这是一个解决方法,因为在没有列出显式版本的情况下,您无法引用子模块poms中的顶级pom。 (这是MNG-624的错误) 它解释了如何为版本创建一个位置(在顶级profiles.xml文件中),并在所有pom.xml文件中只有一个属性引用(即$ {currentVersion})

但是,在此方案版本中:prepare可能不会为您更新profiles.xml。