从Maven迁移至Gradle:如何复刻maven branch与release工作流?
复刻Maven Branch/Release工作流的Gradle方案(基于Nebula Release Plugin)
一、创建Release分支并更新主分支版本
Maven的mvn branch命令本质是完成两件事:创建发布分支、将主分支版本升级到下一个SNAPSHOT。Nebula没有一键等价命令,但可以分两步手动实现完全一致的效果:
创建并初始化Release分支
- 切换到main分支并拉取最新代码:
git checkout main git pull origin main - 创建目标发布分支(如
release-2.0):git checkout -b release-2.0 - 移除版本的SNAPSHOT后缀,转为发布候选版本:
./gradlew nebulaReleaseUpdateVersion -Prelease.version=2.0.0 - 提交版本变更并推送分支:
git add build.gradle settings.gradle # 包含版本定义的文件,按需调整 git commit -m "Prepare release 2.0.0" git push origin release-2.0
- 切换到main分支并拉取最新代码:
升级Main分支到下一个开发版本
- 切回main分支:
git checkout main - 将版本更新为下一个SNAPSHOT(如
2.1.0-SNAPSHOT):./gradlew nebulaReleaseUpdateVersion -Prelease.version=2.1.0-SNAPSHOT - 提交并推送版本变更:
git add build.gradle settings.gradle git commit -m "Prepare next development version 2.1.0-SNAPSHOT" git push origin main
- 切回main分支:
二、在Release分支发布正式版本
这一步对应Maven的mvn release:perform,Nebula可以直接在发布分支上完成打标签、发布到仓库的操作:
切换到目标Release分支并拉取最新代码:
git checkout release-2.0 git pull origin release-2.0执行发布命令,Nebula会自动创建版本标签(默认格式如
v2.0.0)并推送,同时完成发布流程:./gradlew final若需自定义标签格式,可在
build.gradle中配置:nebulaRelease { tagPattern = /v${version}/ // 默认规则,可按需修改为其他格式 }补丁版本发布(如2.0.1)
若后续需要在Release分支修复bug并发布补丁版本,重复以下步骤:- 在
release-2.0分支修复bug,提交代码 - 更新版本号到补丁版本:
./gradlew nebulaReleaseUpdateVersion -Prelease.version=2.0.1 - 提交版本变更:
git add build.gradle settings.gradle git commit -m "Prepare release 2.0.1" - 执行发布:
./gradlew final
- 在
三、核心配置参考
确保你的build.gradle中正确引入并配置Nebula Release Plugin:
plugins { id 'nebula.release' version '18.3.0' // 使用最新稳定版本 id 'java' id 'maven-publish' // 用于发布到Maven仓库 } // 发布仓库配置(按需调整) publishing { publications { mavenJava(MavenPublication) { from components.java } } repositories { maven { url = uri("你的仓库地址") credentials { username = project.findProperty('repoUsername') ?: System.getenv('REPO_USERNAME') password = project.findProperty('repoPassword') ?: System.getenv('REPO_PASSWORD') } } } } // 配置版本策略为手动指定,贴合原有Maven工作流 nebulaRelease { defaultVersionStrategy = 'manual' }
内容的提问来源于stack exchange,提问作者Vincent Fumo
相关产品推荐
相关产品推荐

