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

按需配置功能是孵化中的功能,因此只有部分构建保证能正确工作。 此功能对于解耦多项目构建效果良好。

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

  • 始终配置根项目。

  • 在执行构建的目录中的项目也会被配置,但仅当在没有任务的情况下执行 Gradle 时。
    这样,当按需配置项目时,默认任务的行为是正确的。

  • 支持标准项目依赖关系,并且配置相关项目。
    如果项目 A 对项目 B 具有编译依赖关系,则构建 A 会导致配置两个项目。

  • 支持通过任务路径声明的任务依赖关系,并导致配置相关项目。
    示例: someTask.dependsOn(":some-other-project:someOtherTask")

  • 从命令行(或 Tooling API)通过任务路径请求的任务会导致配置相关项目。
    例如,构建 project-a:project-b:someTask 会导致配置 project-b

启用 按需配置

您可以使用 --configure-on-demand 标志启用按需配置,或将 org.gradle.configureondemand=true 添加到 gradle.properties 文件。

要为每次构建运行配置按需配置,请参阅Gradle 属性

要为给定的构建配置按需配置,请参阅命令行性能导向选项

解耦项目

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

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

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

为避免耦合问题,建议

  • 避免引用其他子项目的构建脚本,并首选根项目的跨项目配置

  • 避免在执行期间动态更改其他项目的配置。

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

并行项目

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

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

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