在 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】:我不明白你为什么想要版本插件。
首先,您不需要将<version>
标签添加到模块中。您需要指定父级的版本,但您可以从父级继承您的版本(相同)。
其次,maven 发布插件有参数releaseVersion
和developmentVersion
,允许您在命令行上设置发布和未来的开发版本。
【讨论】:
在定义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 更新属性
Springboot - 包括 JPA 依赖项并运行“mvn clean install”失败,HikariPool-1 - 池初始化期间出现异常