如何基于Git分支及环境配置生成不同命名的Jar包?
根据Git分支生成对应环境的Jar包及自定义settings.gradle方案
首先明确:可以按环境自定义settings.gradle文件,不过结合Git分支生成不同命名的Jar包,更推荐把分支检测和Jar命名逻辑结合起来,下面给你具体实现方案:
1. 在settings.gradle中根据分支自动设置项目名称
settings.gradle支持执行Groovy代码,你可以直接在这里获取当前Git分支,然后动态修改项目名称,后续构建出的Jar包会自动沿用这个名称。修改后的settings.gradle代码如下:
def getGitBranch() { def process = "git rev-parse --abbrev-ref HEAD".execute() process.waitFor() return process.text.trim() } // 根据分支映射环境后缀,可根据你的分支规则调整 def branchName = getGitBranch() def envSuffix = branchName == "main" ? "prod" : "dev" rootProject.name = "weather-service-${envSuffix}"
这样,当你在dev分支构建时,项目名称会变成weather-service-dev,最终生成的Jar包就是weather-service-dev.jar;main分支则生成weather-service-prod.jar。
2. 更灵活的方式:在build.gradle中配置Jar命名
如果需要更精细控制Jar包的命名规则,直接在build.gradle的Jar任务里配置更合适(毕竟Jar构建属于构建阶段的职责,比settings.gradle的初始化配置更贴合场景)。示例代码:
jar { // 获取当前Git分支 def branchName = "git rev-parse --abbrev-ref HEAD".execute().text.trim() // 分支到环境的映射,可自定义规则(比如feature分支也用dev后缀) def envSuffix = branchName in ["main", "master"] ? "prod" : "dev" // 设置Jar包文件名 archiveFileName = "weather-service-${envSuffix}.jar" }
3. 关于之前environmentName配置的补充
你之前尝试的environmentName没解决问题,大概率是没把分支和这个配置关联起来。可以通过构建时传递参数的方式实现:
- 构建时手动指定环境:
./gradlew build -PenvironmentName=dev - 然后在build.gradle中读取这个参数来设置Jar名称:
def envSuffix = project.findProperty("environmentName") ?: "dev" // 默认dev jar { archiveFileName = "weather-service-${envSuffix}.jar" }
如果是在CI/CD环境中构建,还可以配置工具自动根据分支传递environmentName参数,实现完全自动化。
内容的提问来源于stack exchange,提问作者user352290
相关产品推荐
相关产品推荐

