按需配置尝试仅为所请求的任务配置相关项目,即,它仅评估参与构建的项目的构建脚本文件。这样,可以减少大型多项目构建的配置时间。

按需配置功能正在孵化中,因此仅保证某些构建能够正常工作。该功能非常适合解耦的多项目构建。

按需配置模式下,项目配置如下:

  • 根项目始终已配置。

  • 执行构建的目录中的项目也已配置,但仅限于在没有任何任务的情况下执行 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 属性

要根据给定构建的需要进行配置,请参阅命令行面向性能的选项

解耦项目

Gradle 允许项目在配置和执行阶段访问彼此的配置和任务。虽然这种灵活性为构建作者提供了帮助,但它限制了 Gradle 执行优化(例如并行项目构建按需配置)的能力。

当项目仅通​​过声明的依赖项和任务依赖项进行交互时,它们被认为是解耦的。对另一个项目对象的任何直接修改或读取都会在项目之间创建耦合。使用“按需配置”时,配置期间的耦合可能会导致有缺陷的构建结果,而执行期间的耦合可能会影响并行执行。

耦合的一种常见来源是配置注入,例如使用allprojects{}subprojects{}在构建脚本中。

为避免耦合问题,建议:

  • 避免引用其他子项目的构建脚本,并且更喜欢从根项目进行交叉配置。

  • 避免在执行过程中动态更改其他项目的配置。

随着 Gradle 的发展,它的目标是提供利用解耦项目的功能,同时为配置注入等常见用例提供解决方案,而无需引入耦合。

并行项目

Gradle 的并行执行功能可优化 CPU 利用率,通过同时执行不同项目的任务来加速构建。

要启用并行执行,请使用--parallel 命令行参数或配置您的构建环境。 Gradle 根据 CPU 核心自动确定最佳并行线程数。

在并行执行期间,每个工作人员专门处理一个特定的项目。任务依赖性得到尊重,工作人员优先考虑上游任务。但是,任务可能不会像顺序模式那样按字母顺序执行。正确声明任务依赖关系和输入/输出以避免排序问题至关重要。