我想查看 Gradle 项目的属性,以手动确保值看起来正确。
properties
当我从多项目构建的根目录调用任务时,它会列出根项目的属性:
$ gradle -q properties
------------------------------------------------------------
Root project
------------------------------------------------------------
allprojects: [root project 'myapp', project ':api', project ':model', project ':ui']
ant: org.gradle.api.internal.project.DefaultAntBuilder@12345
antBuilderFactory: org.gradle.api.internal.project.DefaultAntBuilderFactory@12345
artifacts: org.gradle.api.internal.artifacts.dsl.DefaultArtifactHandler_Decorated@12345
asDynamicObject: DynamicObject for root project 'myapp'
baseClassLoaderScope: org.gradle.api.internal.initialization.DefaultClassLoaderScope@12345
[...]
我还可以为每个单独的子项目请求属性:
$ gradle -q :api:properties
------------------------------------------------------------
Project :api - The shared API for the application
------------------------------------------------------------
allprojects: [project ':api']
ant: org.gradle.api.internal.project.DefaultAntBuilder@12345
antBuilderFactory: org.gradle.api.internal.project.DefaultAntBuilderFactory@12345
artifacts: org.gradle.api.internal.artifacts.dsl.DefaultArtifactHandler_Decorated@12345
asDynamicObject: DynamicObject for project ':api'
baseClassLoaderScope: org.gradle.api.internal.initialization.DefaultClassLoaderScope@12345
[...]
但是,我真正想做的是一次列出给定项目及其所有子项目的属性。
我有点惊讶在根级别调用任务只提供根级别属性。这似乎与 Gradle 文档中关于在多项目构建中按名称执行任务相矛盾:
该命令
gradle test
将在具有该test
任务的任何子项目中执行该任务,相对于当前工作目录。如果从项目根目录运行命令,您将test
在api、shared、services:shared和services:webservice中运行。如果您从 services 项目目录运行命令,您将只执行 services:shared 和 services:webservice 中的任务。Gradle 行为背后的基本规则是:执行层次结构中具有此名称的所有任务。只有在遍历的任何子项目中都没有找到这样的任务时才抱怨。
如何一次列出项目及其子项目的所有属性?作为奖励,为什么不在properties
根级别运行的任务也为子项目运行?我正在使用当前最新版本的 Gradle (6.7.1)。