按需配置仅尝试为请求的任务配置相关项目,即它仅评估参与构建的项目的构建脚本文件。这样,可以减少大型多项目构建的配置时间。
按需配置功能处于孵化阶段,因此仅保证某些构建可以正常工作。此功能适用于解耦多项目构建。
在按需配置模式下,项目配置如下
-
始终配置根项目。
-
执行构建所在的目录中的项目也会被配置,但仅当在不带任何任务的情况下执行 Gradle 时。
这样,当按需配置项目时,默认任务的行为是正确的。 -
支持标准项目依赖项,并配置相关项目。
如果项目 A 对项目 B 有编译依赖项,那么构建 A 将导致配置这两个项目。 -
通过任务路径声明的任务依赖项受支持,并导致配置相关项目。
示例:someTask.dependsOn(":some-other-project:someOtherTask")
-
通过命令行(或工具 API)从任务路径请求的任务将导致配置相关项目。
例如,构建project-a:project-b:someTask
会导致配置project-b
。
启用 configuration-on-demand
可以使用 --configure-on-demand
标志或将 org.gradle.configureondemand=true
添加到 gradle.properties
文件来启用按需配置。
要在每次构建运行时按需配置,请参阅 Gradle 属性。
要在给定构建中按需配置,请参阅 面向命令行性能的选项。
解耦项目
当项目仅通过声明的依赖项和任务依赖项进行交互时,它们被视为解耦。对另一个项目的任何直接修改或读取都会在项目之间创建耦合。在配置期间进行耦合可能会在使用“按需配置”时导致有缺陷的构建结果,而在执行期间进行耦合可能会影响并行执行。
耦合的一个常见来源是配置注入,例如在构建脚本中使用 allprojects{}
或 subprojects{}
。
为避免耦合问题,建议
-
避免引用其他子项目的构建脚本,并优先从根项目进行交叉配置。
-
避免在执行期间动态更改其他项目的配置。
随着 Gradle 的发展,它旨在提供利用解耦项目的功能,同时为常见用例(如配置注入)提供解决方案,而不会引入耦合。