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

如何在Gradle构建脚本中加载.yml属性并动态命名Jar包?

动态根据Spring Profile命名Jar包的实现方案

刚好我之前处理过类似的需求,这里给你两种可靠的实现方式,都能让Jar包自动按照auth-module-%profile_name%.jar的规则命名:

方案一:直接解析application.yml(无需额外插件)

Gradle自带了SnakeYAML库,可以直接用来读取并解析你的YAML配置文件,提取出spring.profiles.active的值。把这段代码加到你的build.gradle里就行:

import org.yaml.snakeyaml.Yaml

// 读取项目中的application.yml配置文件
def yamlConfig = file('src/main/resources/application.yml')
def parsedYaml = new Yaml().load(yamlConfig.text)
// 提取active profile的值
def activeProfile = parsedYaml.spring.profiles.active

// 配置Jar任务的命名规则
jar {
    baseName = "auth-module-${activeProfile}"
    version = '0.1.2'
}

说明

  • 这段代码会自动读取src/main/resources下的application.yml,如果你的配置文件路径不同,记得修改file()方法里的路径。
  • SnakeYAML是Gradle默认依赖的库,不需要额外引入任何插件或依赖。

方案二:利用Spring Boot Gradle插件(如果你用了Spring Boot)

如果你的项目已经引入了Spring Boot的Gradle插件,那可以直接用插件提供的内置属性来获取active profile,代码更简洁:

// 确保已经引入Spring Boot插件(如果没加的话先加上)
plugins {
    id 'org.springframework.boot' version '3.2.0' // 替换成你实际使用的版本
    id 'java'
}

// 配置Jar任务
jar {
    // springBoot.activeProfiles会自动解析配置文件中的active profile
    baseName = "auth-module-${springBoot.activeProfiles[0]}"
    version = '0.1.2'
}

额外优化:支持命令行指定Profile

如果有时候你需要通过命令行临时指定不同的Profile(比如./gradlew jar -Dspring.profiles.active=test),可以稍微修改代码,优先读取系统属性的值, fallback到配置文件里的默认值:

// 方案一的优化版本
import org.yaml.snakeyaml.Yaml

def yamlConfig = file('src/main/resources/application.yml')
def parsedYaml = new Yaml().load(yamlConfig.text)
// 优先取命令行传入的系统属性,没有的话用配置文件里的默认值
def activeProfile = System.getProperty('spring.profiles.active', parsedYaml.spring.profiles.active)

jar {
    baseName = "auth-module-${activeProfile}"
    version = '0.1.2'
}

这样不管是用配置文件里的默认Profile,还是命令行临时指定,Jar包的名字都会自动对应上。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:38:59