文章目錄
- 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}"
}