如何在gradle.properties文件内部引用已定义的属性值
gradle.properties值复用解决方案
Gradle原生不支持gradle.properties文件内部的键值自引用,你尝试的${name}、$name写法无法直接生效属于预期情况,可通过以下两种常用方案实现需求:
方案1:构建脚本内组合值(推荐)
不需要调整gradle.properties里的基础配置,直接在构建脚本中完成值的组合,适配性最高:
Groovy语法(build.gradle)示例:
// 读取gradle.properties中定义的基础值 def baseName = project.property('name') // 组合生成新值存入扩展属性,全项目可复用 ext.place = "${baseName}-1234" // 后续使用时直接引用即可 println place // 输出结果为xyz-1234
Kotlin语法(build.gradle.kts)示例:
val baseName = project.property("name") as String extra["place"] = "$baseName-1234" // 使用方式 println(extra["place"])
如果需要多模块共享组合后的值,把上述逻辑放到根目录build.gradle的subprojects配置块中即可。
方案2:自定义解析支持gradle.properties内占位符
如果希望所有配置都保留在gradle.properties文件中,可以在构建脚本开头增加自定义解析逻辑,支持文件内的${变量名}占位符:
// 放在build.gradle最顶部,优先执行 def properties = new Properties() file('gradle.properties').withInputStream { properties.load(it) } properties.forEach { key, value -> def resolvedVal = value.replaceAll(/\$\{(\w+)}/) { matcher, varKey -> properties.getProperty(varKey, matcher) } ext.set(key as String, resolvedVal) }
添加该逻辑后,你示例中的place=${name}-1234写法就可以正常生效,直接通过project.property("place")就能拿到解析后的完整值。
内容的提问来源于stack exchange,提问作者TheUser
相关产品推荐
相关产品推荐

