【发布时间】:2021-03-22 10:22:43
【问题描述】:
我想查看 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
[...]
但是,我真正想做的是一次列出给定项目及其所有子项目的属性。
我有点惊讶在根级别调用任务只提供根级别属性。这似乎与关于 executing tasks by name in a multi-project build 的 Gradle 文档相矛盾:
命令
gradle test将在具有该任务的任何子项目中执行test任务,相对于当前工作目录。如果从项目根目录运行命令,您将在 api、shared、services:shared 和 中运行test>服务:网络服务。如果从 services 项目目录运行命令,则只会在 services:shared 和 services:webservice 中执行任务。Gradle 行为背后的基本规则是:执行层次结构中具有此名称的所有任务。仅在遍历的任何子项目中没有找到此类任务时才抱怨。
如何一次列出项目及其子项目的所有属性?作为奖励,为什么在根级别运行的properties 任务不也为子项目运行?我正在使用当前最新版本的 Gradle (6.7.1)。
【问题讨论】:
标签: gradle gradle-task gradle-multi-project-build