如何使用Maven Release Plugin发布Hotfix版本并解决无SNAPSHOT报错
报错原因
Maven Release Plugin的release:prepare阶段默认要求当前项目的版本必须为SNAPSHOT后缀,你直接基于1.2.3正式版的tag代码执行发布,此时pom内的版本号为不带SNAPSHOT的正式版,不符合插件前置校验要求,就会触发该报错。
版本命名规则建议
你当前使用的版本规则完全符合Maven版本号排序逻辑,也可调整为主版本号.次版本号.修订版本号.补丁号的四段式(例如1.2.3.1代表1.2.3的第一个Hotfix),两种方式均可,只需团队内部统一即可。
具体操作步骤
整个操作全程在独立的Hotfix分支执行,完全不会修改主线的1.2.4-SNAPSHOT版本配置:
- 基于1.2.3正式版tag创建独立Hotfix分支
git checkout -b hotfix/1.2.3-1 tags/1.2.3
- 将Hotfix分支的版本号修改为符合要求的SNAPSHOT版本,使用versions插件避免手动修改pom出错:
mvn versions:set -DnewVersion=1.2.3-1-SNAPSHOT
修改完成后提交改动到Hotfix分支:
git add pom.xml **/pom.xml git commit -m "调整Hotfix分支版本为1.2.3-1-SNAPSHOT"
- 执行标准发布流程,通过参数指定发布版本号和标签名,无需交互式输入:
# 多模块项目可额外添加-DautoVersionSubmodules=true参数自动同步子模块版本 mvn release:prepare -DreleaseVersion=1.2.3-1 -DdevelopmentVersion=1.2.3-2-SNAPSHOT -Dtag=1.2.3-1 mvn release:perform
参数说明:
-DreleaseVersion=1.2.3-1:指定本次要发布的正式Hotfix版本号-DdevelopmentVersion=1.2.3-2-SNAPSHOT:指定Hotfix分支后续迭代的SNAPSHOT版本,若该分支发布完成后无需保留,该值可随意设置-Dtag=1.2.3-1:指定本次发布生成的Git标签名
- 发布完成后如果需要将Hotfix的改动同步到主线,只需将
hotfix/1.2.3-1分支合并到主线即可,不会影响主线原有的1.2.4-SNAPSHOT版本配置。
可选简化方案
如果Hotfix改动很小,不需要严格走Release Plugin的全流程,可以直接手动调整版本号后部署,省去SNAPSHOT校验环节:
- 同样先拉取Hotfix分支,修改pom版本号为
1.2.3-1 - 执行
mvn clean deploy直接发布 - 手动打Git标签
git tag 1.2.3-1并推送到远程仓库即可
内容的提问来源于stack exchange,提问作者Peter Kronenberg
相关产品推荐
相关产品推荐

