Maven Release 插件通过 prepare 和 perform 两阶段自动化完成版本升级、Git 打标、远程部署及切回开发版,需正确配置 SCM、tagNameFormat 和 distributionManagement,否则命令失败;prepare 校验工作区、更新版本并推送 tag,perform 基于 tag 独立构建部署正式包。

用 Maven Release 插件实现标准化版本发布与打标,核心是把“改版本号→打 Git 标签→部署包→切回开发版”这一整套动作自动化,避免手动出错。它不是简单执行一条命令,而是一套受控、可验证、可追溯的流程。
插件配置要到位:SCM + 版本格式 + 仓库地址
没配好 pom.xml,release 命令会直接失败。关键三项不能漏:
-
SCM 配置:必须声明 Git 仓库地址(
<scm>),插件靠它推送 tag 和提交版本变更。例如:<scm><connection>scm:git:https://github.com/your-org/your-project.git</connection><developerConnection>scm:git:ssh://git@github.com:your-org/your-project.git</developerConnection><url>https://github.com/your-org/your-project</url></scm> -
Release 插件声明:指定版本(推荐 3.0.0+),并定义 tag 名格式,比如按项目版本命名:
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-release-plugin</artifactId><version>3.0.0</version><configuration><tagNameFormat>@{project.version}</tagNameFormat></configuration></plugin> -
部署仓库配置:在
<distributionManagement>中声明 release 仓库(如 Nexus 的 releases repo)和 snapshot 仓库,确保mvn release:perform能正确上传 jar/aar/pom。
准备阶段(release:prepare):自动校验 + 版本升级 + 打标
这一步在本地执行,不发包,但会修改 pom、提交、打 tag 并推送到远程:
- 运行
mvn release:prepare,插件自动检查:
— 当前工作区是否干净(无未提交文件)
— 所有模块是否都不含 SNAPSHOT 依赖(否则中止)
— 单元测试是否全部通过 - 交互式确认三个版本:
— 当前要发布的正式版(如1.2.0,默认去掉 -SNAPSHOT)
— Git tag 名(默认1.2.0,匹配tagNameFormat)
— 下一个开发版(如1.2.1-SNAPSHOT) - 成功后:
— pom.xml 中所有模块版本更新为1.2.0
— 在本地和远程 Git 创建 tag1.2.0
— pom.xml 再次更新为1.2.1-SNAPSHOT并提交
执行阶段(release:perform):独立构建 + 部署正式包
这一步基于刚才打的 tag 拉取干净代码,隔离构建,确保环境一致:
立即学习“Java免费学习笔记(深入)”;
- 运行
mvn release:perform,插件会:
— 克隆 tag1.2.0对应的代码到临时目录
— 执行 clean compile test package deploy(跳过 install)
— 将生成的 jar、sources、javadoc、pom 等部署到distributionManagement中配置的 release 仓库 - 注意:
— 不依赖本地 ~/.m2/repository,完全从远程仓库拉依赖
— 若需跳过测试,加参数-Darguments=-DskipTests
— 若用 GPG 签名(发中央仓库必需),需提前配置maven-gpg-plugin
异常处理与回滚:别让失败卡住流水线
发布中途出错很常见,插件提供了配套机制:
-
mvn release:rollback:仅在prepare失败后使用,它会还原 pom 到原始状态,但不会删除已创建的 tag —— 需手动清理:git tag -d 1.2.0 && git push origin :refs/tags/1.2.0 - 若
perform失败,不影响代码库,只需修复问题后重试即可(tag 已存在,插件会复用) - 建议在 CI 流水线中将
prepare和perform分开触发,并设置人工确认环节,避免误发布
整个流程下来,一次发布就生成了可追溯的 Git tag、一致的 Maven 坐标、部署就绪的二进制包,而且所有模块版本自动对齐。对多模块项目来说,这不只是省事,更是稳定性的底线保障。


















