如何在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
相关产品推荐
相关产品推荐

