作为构建作者,您定义任务和任务之间的依赖关系。Gradle 保证这些任务将按其依赖关系的顺序执行。

您的构建脚本和插件配置此依赖关系图。

例如,如果您的项目任务包括 buildassemblecreateDocs,您的构建脚本可以确保它们按 buildassemblecreateDoc 的顺序执行。

任务图

Gradle 在执行任何任务之前构建任务图。

在构建中的所有项目中,任务形成一个有向无环图 (DAG)。

此图表显示了两个示例任务图,一个抽象图,另一个具体图,任务之间的依赖关系表示为箭头

task dag examples

插件和构建脚本通过任务依赖关系机制带注释的输入/输出为任务图做出贡献。

构建阶段

Gradle 构建有三个不同的阶段。

author gradle 1

Gradle 按顺序运行这些阶段

阶段 1. 初始化
  • 检测 settings.gradle(.kts) 文件。

  • 创建Settings实例。

  • 评估设置文件以确定哪些项目(和包含的构建)组成构建。

  • 为参与构建的每个项目创建 Project 实例。

阶段 2. 配置
  • 评估参与构建的每个项目的构建脚本 build.gradle(.kts)

  • 为请求的任务创建任务图。

阶段 3. 执行
  • 计划并执行选定的任务。

  • 任务之间的依赖关系决定执行顺序。

  • 任务执行可以并行进行。

build lifecycle example

示例

以下示例显示设置和构建文件中的哪些部分对应于各个构建阶段

settings.gradle.kts
rootProject.name = "basic"
println("This is executed during the initialization phase.")
build.gradle.kts
println("This is executed during the configuration phase.")

tasks.register("configured") {
    println("This is also executed during the configuration phase, because :configured is used in the build.")
}

tasks.register("test") {
    doLast {
        println("This is executed during the execution phase.")
    }
}

tasks.register("testBoth") {
    doFirst {
        println("This is executed first during the execution phase.")
    }
    doLast {
        println("This is executed last during the execution phase.")
    }
    println("This is executed during the configuration phase as well, because :testBoth is used in the build.")
}
settings.gradle
rootProject.name = 'basic'
println 'This is executed during the initialization phase.'
build.gradle
println 'This is executed during the configuration phase.'

tasks.register('configured') {
    println 'This is also executed during the configuration phase, because :configured is used in the build.'
}

tasks.register('test') {
    doLast {
        println 'This is executed during the execution phase.'
    }
}

tasks.register('testBoth') {
	doFirst {
	  println 'This is executed first during the execution phase.'
	}
	doLast {
	  println 'This is executed last during the execution phase.'
	}
	println 'This is executed during the configuration phase as well, because :testBoth is used in the build.'
}

以下命令执行上面指定的 testtestBoth 任务。由于 Gradle 仅配置请求的任务及其依赖关系,因此 configured 任务永远不会配置

> gradle test testBoth
This is executed during the initialization phase.

> Configure project :
This is executed during the configuration phase.
This is executed during the configuration phase as well, because :testBoth is used in the build.

> Task :test
This is executed during the execution phase.

> Task :testBoth
This is executed first during the execution phase.
This is executed last during the execution phase.

BUILD SUCCESSFUL in 0s
2 actionable tasks: 2 executed
> gradle test testBoth
This is executed during the initialization phase.

> Configure project :
This is executed during the configuration phase.
This is executed during the configuration phase as well, because :testBoth is used in the build.

> Task :test
This is executed during the execution phase.

> Task :testBoth
This is executed first during the execution phase.
This is executed last during the execution phase.

BUILD SUCCESSFUL in 0s
2 actionable tasks: 2 executed

阶段 1. 初始化

初始化阶段,Gradle 检测参与构建的项目(根项目和子项目)和包含的构建的集合。

Gradle 首先评估设置文件 settings.gradle(.kts),并实例化一个 Settings 对象。然后,Gradle 为每个项目实例化 Project 实例。

阶段 2. 配置

配置阶段,Gradle 向初始化阶段找到的项目添加任务和其他属性。

阶段 3. 执行

执行阶段,Gradle 运行任务。

Gradle 使用配置阶段生成的 task 执行图来确定要执行的任务。