gradle 替换项目里用的properties变量名 [gradle访问带点号的key/value]

本文介绍在Gradle项目中使用Vault管理敏感信息的方法,重点讲解如何正确配置vault.properties文件并解决变量替换时遇到的异常问题。通过使用getProperty方法,确保变量正确填充,实现不同环境下的roleId和secretId动态配置。

背景:最近使用Vault来管理用户名和密码时,需要在项目配置文件vault.properties文件里使用占位符来写入变量名,gradle编译期间填入相关环境的roleId & secretId.

 

vault.properties

vault.roleId=${vault.roleId}

vault.secretId=${vault.secretId}

 

build.gradle 文件里定义替换变量的task

// replace vault roleId & secretId
processResources {
    if (project.hasProperty("vault.roleId") && project.hasProperty("vault.secretId")){
        filesMatching("**/vault.properties") {
            println("replace vault key for ["+it.relativePath+"] ...")
            expand project.properties
        }
    }
} 

抛出异常:

Execution failed for task ':vault-java:processResources'.
> Could not copy file '/Users/adorechen/IdeaProjects/vault-java/src/main/resources/vault.properties' to '/Users/adorechen/IdeaProjects/vault-java/build/resources/main/vault.properties'.
 

add argument: "--stacktrace"

Caused by: groovy.lang.MissingPropertyException: No such property: vault for class: SimpleTemplateScript2
        at SimpleTemplateScript2.run(SimpleTemplateScript2.groovy:3)
        at org.gradle.api.internal.file.copy.FilterChain$3.transform(FilterChain.java:121)
        at org.gradle.api.internal.file.copy.FilterChain$3.transform(FilterChain.java:110)
        at org.gradle.api.internal.ChainingTransformer.transform(ChainingTransformer.java:37)
        at org.gradle.api.internal.file.copy.FilterChain.transform(FilterChain.java:56)
        at org.gradle.api.internal.file.copy.FilterChain.transform(FilterChain.java:64)
        at org.gradle.api.internal.file.copy.DefaultFileCopyDetails.open(DefaultFileCopyDetails.java:88)
        at org.gradle.api.internal.file.AbstractFileTreeElement.copyTo(AbstractFileTreeElement.java:56)
        at org.gradle.api.internal.file.copy.DefaultFileCopyDetails.copyTo(DefaultFileCopyDetails.java:96)
        at org.gradle.api.internal.file.AbstractFileTreeElement.copyFile(AbstractFileTreeElement.java:93)
 

原因在于groovy默认${vault.roleId}时把vault作为变量名,查找时不能找到vault相关变量,然后抛出异常。

解决方案:使用getProperty("vault.roleId")来访问变量即可。

 

vault.roleId=${getProperty("vault.roleId")}
vault.secretId=${getProperty("vault.secretId")}

 

OK,重新打包编译,通过。

 

参考:

gradle properties 优先级及访问 https://mp.youkuaiyun.com/postedit/89437115 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值