如何让Maven versions:set命令忽略SNAPSHOT版本?
解决Maven versions:set命令误改SNAPSHOT版本的问题
问题描述
在Jenkins构建Java项目时,使用以下命令设置版本:
mvn build-helper:parse-version versions:set -DnewVersion=${parsedVersion.majorVersion}.${parsedVersion.minorVersion}${parsedVersion.qualifier?}.##JenkinsBuildNumber##
该命令能正确为正式版本追加Jenkins构建号(如0.3.0 => 0.3.12),但会误将SNAPSHOT版本转为正式版本:
1.0-SNAPSHOT => 1.0.12 2.0-SNAPSHOT => 2.0.54
需求是:SNAPSHOT版本保持不变,仅非SNAPSHOT版本追加构建号。
解决方案
使用versions:set插件的ifVersion参数,指定仅当项目版本不是SNAPSHOT时才执行版本修改操作。修改后的命令如下:
mvn build-helper:parse-version versions:set -DifVersion=!*-SNAPSHOT -DnewVersion=${parsedVersion.majorVersion}.${parsedVersion.minorVersion}${parsedVersion.qualifier?}.##JenkinsBuildNumber##
参数说明
-DifVersion=!*-SNAPSHOT:表示仅当当前项目版本不匹配*-SNAPSHOT模式时,才执行versions:set操作。!表示取反,*-SNAPSHOT匹配所有以-SNAPSHOT结尾的版本。
效果验证
执行修改后的命令后,版本变化符合预期:
1.0-SNAPSHOT => 1.0-SNAPSHOT 2.0-SNAPSHOT => 2.0-SNAPSHOT 0.3.0 => 0.3.12 0.5.0 => 0.5.56 1.2.0 => 1.2.124
补充说明
之前尝试的-DignoredVersions=.*-SNAPSHOT参数是用于忽略依赖版本的筛选,并非控制当前项目版本是否被修改,因此无法达到预期效果。
内容的提问来源于stack exchange,提问作者Burner
相关产品推荐
相关产品推荐

