在 mvn 发布期间使用 mvn 版本插件

Posted

技术标签:

【中文标题】在 mvn 发布期间使用 mvn 版本插件【英文标题】:Use mvn version plugin during mvn release 【发布时间】:2020-09-07 00:51:44 【问题描述】:

我在 Kubernetes 中有一个多模块 maven 项目。我们打算一起对所有这些模块进行版本控制。但截至目前,我最终在每个模块 pom.xml 中硬编码版本如下

<parent>
    <artifactId>xyz-application</artifactId>
    <groupId>com.xyz</groupId>
    <version>2.50.0.g</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.xyz</groupId>
<artifactId>xyz-Library</artifactId>
<version>2.50.0.g</version>

主父模块有以下配置

<modelVersion>4.0.0</modelVersion>
<groupId>com.xyz</groupId>
<artifactId>xyz-application</artifactId>
<version>2.50.0.g</version>
<packaging>pom</packaging>

Reference

目前,我在 pom.xml 中使用 mvn release 插件

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-release-plugin</artifactId>
    <version>2.5.3</version>
    <configuration>
        <autoVersionSubmodules>true</autoVersionSubmodules>
        <tagNameFormat>$product_label-@project.version</tagNameFormat>
        <releaseProfiles>releases</releaseProfiles>
        <preparationGoals>clean deploy</preparationGoals>
        <arguments>-s settings.xml</arguments> 
    </configuration>
</plugin>

由于项目在 Kubernetes,这里是我在发布时使用的 Jenkins 文件内容

def MVN_RELEASE = "release:clean release:prepare release:perform -Dmaven.source.skip=true"
stage('Release artifacts to artifactory') 
    steps 
        container('maven') 
            withCredentials() 
                sh "mvn $MVN_RELEASE  -Dresume=false"
            
        
    

现在,在发布期间,我需要通过我选择的新版本更新父 pom 和所有子模块 pom 版本,我可以使用 mvn version plugin,类似

    mvn versions:set -DnewVersion=3.00.0-SNAPSHOT -DprocessAllModules -DgenerateBackupPoms=false 然后 mvn versions:commit -DprocessAllModules

我应该在 Jenkins/pom.xml 的哪个阶段添加这个?现在,这个插件只有在我想升级到我选择的特定版本(比如3.00.0-Snapshot)时才有用,否则,mvn 发布插件应该自动将版本升级到类似2.50.1-SNAPSHOT。这是正确的理解吗?

我该如何优雅地处理这个 pom 版本更新问题?

提前致谢!

【问题讨论】:

【参考方案1】:

我不明白你为什么想要版本插件。

首先,您不需要将&lt;version&gt; 标签添加到模块中。您需要指定父级的版本,但您可以从父级继承您的版本(相同)。

其次,maven 发布插件有参数releaseVersiondevelopmentVersion,允许您在命令行上设置发布和未来的开发版本。

【讨论】:

在定义MVN_RELEASE的时候,可以这样定义吗-"def MVN_RELEASE = "releaseVersion=3.00.0 developmentVersion=3.00.1 release:clean release:prepare release:perform -Dmaven.source.skip=true"" 为什么是release:clean?为什么是 3.00.0 而不是 3.0.0 ?除此之外,开发可能是3.0.1-SNAPSHOT ... 我需要做哪些更改 - 1. 如果我希望 mvn release 自动将版本增加到 2.50.1-SNAPSHOT? 2. 如果我希望 mvn release 不增加版本并保持 2.50.0,基本上用新发布的代码覆盖现有的 2.50.0? 版本一旦发布就无法覆盖。 如果我希望 mvn release 自动将版本增加到 2.50.1-SNAPSHOT,我应该将 releaseVersion 和 developmentVersion 留空吗? "def MVN_RELEASE = "releaseVersion= developmentVersion= release:clean release:prepare release:perform -Dmaven.source.skip=true"

以上是关于在 mvn 发布期间使用 mvn 版本插件的主要内容,如果未能解决你的问题,请参考以下文章

遇到问题--java--mac版本的idea在控制台中使用mvn命令not found

遇到问题--java--mac版本的idea在控制台中使用mvn命令not found

遇到问题--java--mac版本的idea在控制台中使用mvn命令not found

使用 mvn 版本排除属性:使用 excludesList 更新属性

修改mac中mvn 的 java 版本

Springboot - 包括 JPA 依赖项并运行“mvn clean install”失败,HikariPool-1 - 池初始化期间出现异常