文章目录
- 0. 总结表格
- 1. 构建初始阶段
- `gradle.settingsEvaluated()`
- `gradle.projectsLoaded()`
- 2. 配置阶段
- `gradle.beforeProject()`
- `gradle.afterProject()`
- `gradle.projectEvaluated()`
- `gradle.afterEvaluate()`
- `gradle.taskGraph.whenReady`
- 3. 执行阶段
- `gradle.taskGraph.beforeTask`
- `gradle.taskGraph.afterTask`
- `gradle.buildFinished`
Gradle 是一个强大的构建工具,在构建过程中提供了丰富的生命周期钩子,这些钩子函数让开发者能够在构建的不同阶段插入自定义操作。本文将详细介绍 Gradle 构建生命周期中的各个钩子,并讨论它们在不同构建阶段的应用场景。通过对这些钩子的理解,开发者可以更灵活地定制构建过程。
0. 总结表格
阶段 | 钩子函数 | 触发时机 | 备注 |
---|---|---|---|
构建初始阶段 | gradle.settingsEvaluated() | 完成项目的配置阶段之后调用(只能在 settings.gradle 或 init.gradle 中定义) | 在配置阶段完成后调用 |
gradle.projectsLoaded() | 所有项目加载之后调用(只能在 settings.gradle 或 init.gradle 中定义) | 在所有项目加载完成后调用 | |
配置阶段 | gradle.beforeProject() | 每个项目配置之前调用(只能在 settings.gradle 或 init.gradle 中定义) | 在每个项目的配置阶段开始之前调用 |
gradle.afterProject() | 每个项目配置之后调用 | 每个项目配置完成后调用 | |
gradle.projectEvaluated() | 所有项目完成配置之后调用 | 在所有项目配置完成后调用 | |
gradle.afterEvaluate() | 整个配置阶段完成后调用 | 在所有项目配置结束后调用 | |
gradle.taskGraph.whenReady | 所有任务图已构建完成,任务准备好执行时调用 | 在所有任务准备就绪后调用 | |
执行阶段 | gradle.taskGraph.beforeTask | 每个任务执行之前调用 | 在每个任务开始执行前调用 |
gradle.taskGraph.afterTask | 每个任务执行完成之后调用 | 在每个任务完成执行后调用 | |
gradle.buildFinished | 整个构建过程结束后调用 | 在整个构建结束时调用 |
1. 构建初始阶段
- 构建初始阶段主要集中在项目配置的加载与评估过程中。以下钩子主要用于在 Gradle 解析并准备项目设置时执行操作。
gradle.settingsEvaluated()
- 调用时机:在完成项目的配置阶段后调用。
- 作用:这个钩子用于在
settings.gradle
或init.gradle
中完成项目配置后执行。你可以在这里做一些全局性的设置,或者调整 Gradle 配置文件中的其他设置。 - 示例:可以用于设置默认的构建目录或插件版本。
- 适用:定义在 setting.gradle 或 init.gradle 脚本中
gradle.settingsEvaluated {println "Settings have been evaluated."
}
gradle.projectsLoaded()
- 调用时机:所有项目加载后调用。
- 作用:在所有子项目的配置完成后调用,可以用来进行项目级别的修改或设置。
- 示例:修改或验证项目加载过程中的某些设置。
- 适用:定义在 setting.gradle 或 init.gradle 脚本中
gradle.projectsLoaded {println "All projects are loaded."
}
2. 配置阶段
- 配置阶段是 Gradle 解析项目和任务的阶段。这一阶段的钩子提供了对项目配置的操作时机。
gradle.beforeProject()
- 调用时机:每个项目配置开始之前调用。
- 作用:在每个项目的配置阶段开始之前执行,可以用来做一些初始化工作。此钩子只能在
settings.gradle
或init.gradle
中定义。 - 示例:可以在这里记录开始配置项目信息,或者进行资源初始化。
- 适用:定义在 setting.gradle 或 init.gradle 脚本中
gradle.beforeProject {println "Starting to configure project: ${project.name}"
}
gradle.afterProject()
- 调用时机:每个项目配置完成之后调用。
- 作用:每个项目完成配置后,适合在这里做一些项目级别的操作,如打印配置状态或修改项目属性。
- 示例:输出项目配置完成的信息。
gradle.afterProject {println "Project ${project.name} has been configured."
}
gradle.projectEvaluated()
- 调用时机:当所有项目都完成配置后调用。
- 作用:该钩子可以用来做一些在所有项目配置完成后的全局修改。它会在所有项目的配置阶段结束后触发。
- 示例:在项目配置完成后,为每个项目添加任务或配置插件。
gradle.projectEvaluated {println "All projects have been evaluated."
}
gradle.afterEvaluate()
- 调用时机:整个配置阶段完成后调用。
- 作用:该钩子在所有项目的配置都完成后触发,适合在这里执行全局的配置修改或最终的设置。
- 示例:用于修改项目属性或执行其他评估后的操作。
gradle.afterEvaluate {println "Finished evaluating projects."
}
gradle.taskGraph.whenReady
- 调用时机:在任务图已经构建完成且可以执行之前调用。
- 作用:当 Gradle 确定所有需要执行的任务后,
taskGraph.whenReady
被触发。此时你可以查看任务执行的顺序,甚至修改任务的执行顺序或取消某些任务的执行。 - 示例:可以用来动态地改变任务依赖关系或调整任务执行策略。
gradle.taskGraph.whenReady { taskGraph ->println "Task graph is ready with tasks: ${taskGraph.allTasks}"
}
3. 执行阶段
执行阶段是 Gradle 执行具体任务的阶段。在这个阶段,你可以在每个任务执行之前和之后执行自定义操作。
gradle.taskGraph.beforeTask
- 调用时机:执行每个任务之前调用。
- 作用:在任务开始之前调用,适用于做任务前的准备工作,比如打印日志或检查任务的执行条件。
- 示例:可以用于添加日志,记录每个任务开始的时刻。
gradle.taskGraph.beforeTask { task ->println "About to execute task: ${task.name}"
}
gradle.taskGraph.afterTask
- 调用时机:每个任务执行完成之后调用。
- 作用:任务执行完成后触发,适合在任务完成后做一些清理工作,或者收集任务执行的结果。
- 示例:在任务执行完后进行统计或其他后续处理。
gradle.taskGraph.afterTask { task, taskState ->println "Task ${task.name} finished with state: ${taskState}"
}
gradle.buildFinished
- 调用时机:整个构建过程结束后调用。
- 作用:当构建过程完全结束时调用,适合做一些结束的清理工作或者总结性操作。
- 示例:可以用于生成构建报告或发送构建完成的通知。
gradle.buildFinished { result ->println "Build finished with result: ${result.result}"
}