如何通过GitHub Actions自动更新不同分支的POM版本?
解决方案:PR合并后同步Main与Dev分支的Maven版本
完全可行,Maven Release插件本身确实只聚焦当前分支的发布流程,但结合分支操作、versions插件或自定义脚本,就能实现你要的版本同步效果。下面是两种落地方案:
方案一:本地手动操作流程
适合小型项目或不需要自动化的场景:
- 合并Dev到Main分支后,切换到Main分支,执行命令移除快照标识:
(如果是多模块项目,必须加mvn versions:set -DnewVersion=1.0.0 -DprocessAllModules-DprocessAllModules同步所有子模块版本) - 提交Main分支的版本变更并推送:
git commit -am "Bump version to 1.0.0 for release" git push origin main - 切换回Dev分支,执行命令升级快照版本:
mvn versions:set -DnewVersion=1.0.1-SNAPSHOT -DprocessAllModules - 提交Dev分支的版本变更并推送:
git commit -am "Bump dev version to 1.0.1-SNAPSHOT" git push origin dev
方案二:CI自动化实现(以GitHub Actions为例)
适合需要PR合并后自动完成版本更新的场景,核心是利用CI触发分支操作:
- 在仓库根目录创建
.github/workflows/version-bump.yml配置文件:name: Bump Versions After PR Merge on: push: branches: [ main ] # 只在Dev合并到Main的PR推送时触发,可根据需要调整触发条件 paths-ignore: - 'README.md' jobs: bump-versions: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 with: fetch-depth: 0 # 拉取全部分支历史 # 提取当前Dev分支的快照版本,生成正式版和下一个快照版本 - name: Calculate versions run: | git checkout dev CURRENT_VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout) RELEASE_VERSION=${CURRENT_VERSION%-SNAPSHOT} # 语义化版本号自增补丁号,若需调整规则可修改awk逻辑 NEXT_VERSION=$(echo $RELEASE_VERSION | awk -F. '{print $1"."$2"."$3+1}') NEXT_SNAPSHOT_VERSION=$NEXT_VERSION-SNAPSHOT echo "RELEASE_VERSION=$RELEASE_VERSION" >> $GITHUB_ENV echo "NEXT_SNAPSHOT_VERSION=$NEXT_SNAPSHOT_VERSION" >> $GITHUB_ENV # 更新Main分支版本为正式版 - name: Update Main branch version run: | git checkout main mvn versions:set -DnewVersion=${{ env.RELEASE_VERSION }} -DprocessAllModules git config --global user.name "github-actions[bot]" git config --global user.email "github-actions[bot]@users.noreply.github.com" git commit -am "Bump version to ${{ env.RELEASE_VERSION }} for release" git push origin main # 更新Dev分支版本为下一个快照版 - name: Update Dev branch version run: | git checkout dev mvn versions:set -DnewVersion=${{ env.NEXT_SNAPSHOT_VERSION }} -DprocessAllModules git commit -am "Bump dev version to ${{ env.NEXT_SNAPSHOT_VERSION }}" git push origin dev - 配置CI的仓库推送权限:确保GitHub Actions拥有仓库的读写权限(默认已开启,若有问题可在仓库设置中调整Actions权限)
关键说明
- 不推荐直接用Maven Release插件跨分支操作:该插件的设计目标是完成单分支的发布(打tag、发布到仓库等),跨分支版本更新不属于它的核心能力,强行扩展反而会增加复杂度。
- 版本号规则:如果你的版本号不是
x.y.z格式,需要修改脚本中的版本提取和自增逻辑,比如适配x.y.z-beta等预发布版本。 - 多模块项目:所有
versions:set命令必须加-DprocessAllModules,否则只会更新根模块的版本。
内容的提问来源于stack exchange,提问作者JavaDuke
相关产品推荐
相关产品推荐

