如何从根项目Gradle文件访问子项目的ext属性
Gradle子项目属性检测问题解决办法
问题原因
根项目的subprojects配置块会在子项目构建脚本执行前运行,所以你在子项目build.gradle里定义的project.ext.foo此时还未初始化,自然无法被根项目检测到。
解决方案
方案1:使用afterEvaluate延迟检测
在子项目完成自身脚本执行后再检查属性,修改根项目的build.gradle:
subprojects { afterEvaluate { subproject -> // 检测属性是否存在 if (subproject.hasProperty("foo")) { // 这里编写你的配置逻辑 println "子项目 ${subproject.name} 的foo属性值:${subproject.foo}" } // 或者用findProperty做兜底 def fooValue = subproject.findProperty('foo') ?: "默认值" // 基于fooValue执行配置 } }
方案2:将属性移至gradle.properties
如果属性不需要动态计算,可在子项目目录下创建gradle.properties文件,写入:
foo=bar
此时根项目的subprojects块可以直接检测到该属性,无需延迟执行:
subprojects { if (project.hasProperty("foo")) { // 直接执行配置逻辑 } }
验证方法
执行gradle :子项目名称:properties命令,查看输出的属性列表,确认foo属性已被正确加载。
内容的提问来源于stack exchange,提问作者rysv
相关产品推荐
相关产品推荐

