You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过GitHub Actions自动更新不同分支的POM版本?

解决方案:PR合并后同步Main与Dev分支的Maven版本

完全可行,Maven Release插件本身确实只聚焦当前分支的发布流程,但结合分支操作、versions插件或自定义脚本,就能实现你要的版本同步效果。下面是两种落地方案:

方案一:本地手动操作流程

适合小型项目或不需要自动化的场景:

  1. 合并Dev到Main分支后,切换到Main分支,执行命令移除快照标识:
    mvn versions:set -DnewVersion=1.0.0 -DprocessAllModules
    
    (如果是多模块项目,必须加-DprocessAllModules同步所有子模块版本)
  2. 提交Main分支的版本变更并推送:
    git commit -am "Bump version to 1.0.0 for release"
    git push origin main
    
  3. 切换回Dev分支,执行命令升级快照版本:
    mvn versions:set -DnewVersion=1.0.1-SNAPSHOT -DprocessAllModules
    
  4. 提交Dev分支的版本变更并推送:
    git commit -am "Bump dev version to 1.0.1-SNAPSHOT"
    git push origin dev
    

方案二:CI自动化实现(以GitHub Actions为例)

适合需要PR合并后自动完成版本更新的场景,核心是利用CI触发分支操作:

  1. 在仓库根目录创建.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
    
  2. 配置CI的仓库推送权限:确保GitHub Actions拥有仓库的读写权限(默认已开启,若有问题可在仓库设置中调整Actions权限)

关键说明

  • 不推荐直接用Maven Release插件跨分支操作:该插件的设计目标是完成单分支的发布(打tag、发布到仓库等),跨分支版本更新不属于它的核心能力,强行扩展反而会增加复杂度。
  • 版本号规则:如果你的版本号不是x.y.z格式,需要修改脚本中的版本提取和自增逻辑,比如适配x.y.z-beta等预发布版本。
  • 多模块项目:所有versions:set命令必须加-DprocessAllModules,否则只会更新根模块的版本。

内容的提问来源于stack exchange,提问作者JavaDuke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 16:11:05