按需配置尝试仅为所请求的任务配置相关项目,即,它仅评估参与构建的项目的构建脚本文件。这样,可以减少大型多项目构建的配置时间。
按需配置功能正在孵化中,因此仅保证某些构建能够正常工作。该功能非常适合解耦的多项目构建。
按需配置模式下,项目配置如下:
-
根项目始终已配置。
-
执行构建的目录中的项目也已配置,但仅限于在没有任何任务的情况下执行 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 的发展,它的目标是提供利用解耦项目的功能,同时为配置注入等常见用例提供解决方案,而无需引入耦合。