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

eug*_*enn 33 maven-2 multi-module maven-release-plugin

我有一个多模块项目.

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

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

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

Pas*_*ent 30

发布插件可以处理.你检查了更新POM版本吗?但是......我没有得到什么.将POM中的版本从x-SNAPSHOT更改为新版本并将POM中的版本更改为新值y-SNAPSHOT应按照准备版本中的release:prepare说明完成.使用这个目标会出现什么问题?

更新:autoVersionSubmodules参数可能是你在找什么.从 准备发布示例:

多模块项目

系统将提示您输入项目每个模块的版本号.如果您希望每个模块都获得与父POM相同的版本,则可以将选项设置 autoVersionSubmodulestrue.现在,您只会被问一次发布版本和下一个开发版本.

父pom.xml的片段

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-release-plugin</artifactId>
            <version>x.y.z</version>
            <configuration>
                <goals>deploy</goals>
                <autoversionsubmodules>true</autoversionsubmodules>
            </configuration>
        </plugin>
    </plugins>
</build>
Run Code Online (Sandbox Code Playgroud)


aym*_*ens 26

一个灵活的设置poms版本,包括多模块项目的方法是Versions Maven插件.

mvn versions:set -DnewVersion=your_new_version
Run Code Online (Sandbox Code Playgroud)

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

然后

mvn versions:commit
Run Code Online (Sandbox Code Playgroud)

要么

mvn versions:revert
Run Code Online (Sandbox Code Playgroud)

  • `commit`和`revert`对`set`期间创建的备份pom文件起作用,这是IMO不必要的,因为我正在使用版本控制,并且可以简单地恢复到git中的内容.通过在`set`命令中添加`-DgenerateBackupPoms = false`,之后不需要`commit`或`set`.我的2美分. (5认同)
  • 这是一种预运行,让用户可以在有效执行操作之前检查结果。但是,是的,您也可以直接前进。但如果发生错误,恢复 git 提交可能不如设置提交恕我直言那么有趣。 (2认同)

use*_*276 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>
    
    Run Code Online (Sandbox Code Playgroud)

     

    <?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>
    
    Run Code Online (Sandbox Code Playgroud)
  3. 创建另一个pom.xml以将这些项目组合在一起.

    <modules>   
      <module>../xyz-parent</module>
      <module>../module-1</module>
      <module>../module-2</module>      
    </modules>
    
    Run Code Online (Sandbox Code Playgroud)
  4. 然后更新父项目的版本,然后通过下面的命令构建它.

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

    mvn -N versions:update-child-modules
    
    Run Code Online (Sandbox Code Playgroud)
  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
    
    Run Code Online (Sandbox Code Playgroud)