gradle properties 是查看项目所有可读属性的首选命令,它不依赖IDE、无需修改脚本或编写task,按字母序清晰列出Gradle内置属性、插件注入属性、ext扩展属性及gradle.properties中定义的值(需显式桥接到ext),并标注类型与只读状态。

直接运行 gradle properties 就能看到所有项目属性,包括 Gradle 内置属性、插件注入属性、ext 扩展属性和 gradle.properties 中定义的值。
为什么 gradle properties 是首选命令
它不依赖 IDE,不需修改脚本,也不用写临时 task,输出结构清晰,按字母序列出所有可读属性及其类型(如 String、File、Project),还能看出哪些是只读属性(标为 read-only)。
- 执行位置必须在项目根目录(即含
settings.gradle或settings.gradle.kts的目录),否则报错Could not determine java version from 'xx' - 如果项目用了 Kotlin DSL(
build.gradle.kts),命令仍完全可用,无需额外配置 - 输出中带
ext.前缀的属性,就是你在build.gradle里用ext { ... }定义的;没前缀但能访问的(如version、group),是 Project 接口原生属性 - 注意:
local.properties里的内容(如sdk.dir)不会自动暴露为 Project 属性,得手动加载,所以gradle properties不会显示它们
gradle properties 和 gradle -q help 的区别在哪
后者只展示任务列表和简短描述,不涉及属性;前者专注属性本身,且包含继承关系——比如子项目执行时,会同时列出 rootProject.name 和 this.name,方便确认作用域。
- 若想只看自定义扩展属性,可以加
grep过滤:gradle properties | grep "ext." - 若发现某个
ext.xxx没出现,大概率是定义位置不对:它必须在build.gradle的最外层作用域(不能包在android { }或tasks { }里) - Gradle 8.0+ 默认启用构建缓存,
properties输出可能被缓存,加--no-build-cache可强制刷新(尤其改过ext后没更新显示时)
常见误判:为什么 gradle.properties 里的 key 没出现在 gradle properties 输出里
因为 gradle.properties 中的属性默认只作为系统属性或项目属性注入,**不会自动挂到 Project 实例上**。例如你写了 myApiToken=abc123,它实际是 System.getProperty("myApiToken"),不是 project.myApiToken。
- 要让它变成 Project 属性,得在
build.gradle里显式桥接:ext.myApiToken = project.findProperty("myApiToken") ?: "" - 更稳妥的做法是统一用
findProperty()读取,而不是直接点调用:def token = findProperty("myApiToken"),避免Unknown property错误 -
gradle.properties中以systemProp.开头的条目(如systemProp.http.proxyHost=127.0.0.1)会被 JVM 自动识别,但依然不会进gradle properties列表
真正容易被忽略的是:属性是否在正确的作用域里定义、是否被子项目继承、以及 gradle.properties 和 ext 的边界——它们看起来都叫“属性”,但生命周期和可见性完全不同。

















