Groovy中Map内变量引用问题:如何获取变量实际值而非字面量
Groovy动态引用变量值的解决方法
你当前代码里的"${CODEBASE}_sonar_binaries"只是生成了一个字符串字面量(比如"dcihub_sonar_binaries"),并没有去引用同名变量的实际值。要实现通过变量名动态获取对应的值,可以利用Groovy的动态特性:
方法1:使用this关键字结合字符串插值
修改else分支的代码,通过this."变量名字符串"的方式访问变量:
SonarValues.put(CODEBASE, this."${CODEBASE}_sonar_binaries")
方法2:使用binding对象获取变量
如果变量是在脚本级别定义的,也可以通过binding.getVariable()方法直接按名称获取:
SonarValues.put(CODEBASE, binding.getVariable("${CODEBASE}_sonar_binaries"))
修改后的完整代码
dcihub_sonar_binaries = '$WORKSPACE/tenants/dcihub/ui.apps/target/,$WORKSPACE/tenants/dcihub/ui.config/target/,$WORKSPACE/tenants/dcihub/ui.content/target/' def CODEBASE = "dcihub" def SonarValues = [:] if (CODEBASE == "platform") { SonarValues = ["platform": [platform_sonar_exclusion, platform_sonar_binaries]] } else { SonarValues.put(CODEBASE, this."${CODEBASE}_sonar_binaries") } return SonarValues
修改后,返回的SonarValues中,"dcihub"对应的value就是dcihub_sonar_binaries变量的实际值:
'$WORKSPACE/tenants/dcihub/ui.apps/target/,$WORKSPACE/tenants/dcihub/ui.config/target/,$WORKSPACE/tenants/dcihub/ui.content/target/'
内容的提问来源于stack exchange,提问作者WhoAmI
相关产品推荐
相关产品推荐

