Gradle常用文件目錄
Gradle 構建的生命周期,有3個階段:
- 初始化階段
- 配置階段
- 執行階段
1、初始化階段
- Gradle 支持構建單個工程個多個子工程,初始化階段主要負責收集所有參與本次構建的子工程,創建一個項目的層次結構,并未每個項目創建一個 project 實例。與該階段關系最大的就是根目錄下的 setting.gradle 文件。
可以在 setting.gradle中添加Gradle構建生命周期監聽
setting.gradle
println("[Gradle生命周期] - 我是 setting.gradle")//Gradle構建生命周期監聽
gradle.addBuildListener(new BuildAdapter() {@Overridevoid settingsEvaluated(Settings settings) {super.settingsEvaluated(settings)println("[Gradle生命周期] - 初始化階段完成")}@Overridevoid projectsEvaluated(Gradle gradle) {super.projectsEvaluated(gradle)println("[Gradle生命周期] - 配置階段完成")}@Overridevoid buildFinished(BuildResult result) {super.buildFinished(result)println("[Gradle生命周期] - 構建結束")}
})
執行效果
從執行結果可以看出,初始化階段主要是執行 setting.gradle 文件。
2、配置階段
- 配置階段主要是執行各個目錄下的 build.gradle 文件,并且根據項目的配置去構建一個任務依賴的關系圖,以便在執行階段執行
在根目錄的build.gradle文件末尾添加
println("[Gradle生命周期] - 我是根目錄build.gradle")
在app目錄的build.gradle文件末尾添加
println("[Gradle生命周期] - 我是app目錄build.gradle")
執行結果
可以看到,初始化完成之后,便依次執行各個目錄中的build.gradle
3、執行階段
- 主要負責把配置階段生成的 任務依賴圖 依次去執行
在 app 目錄的 build.gradle 末尾添加
println("[Gradle生命周期] - 我是app目錄build.gradle")task testTask(){doLast {println("[Gradle生命周期] - 我是app目錄build.gradle中的testTask")}
}
執行命令
./gradlew :app:testTask -q
執行結果
可以看到,配置階段完成后,便開始執行 task
4、Gradle構建過程中,幾個重要角色
階段 | 角色 |
---|---|
初始化階段 | rootProject |
配置階段 | project |
執行階段 | task |
- 初始化階段,主要是執行 setting.gradle,可以在setting.gradle中拿到 rootProject,并且之后的階段都可以使用 rootProject
- 配置階段,就可以拿到所有子工程的project實例了
- 執行階段,task是Gradle構建中執行的最小單元,我們所有的構建、編譯、打包,都是有一個個task組成的,一個project中可以有多個task,task之間還可以相互依賴的
在setting.gradle中添加
println("[Gradle生命周期] - 我是 setting.gradle")
//初始化階段可以拿到 rootProject
println("[Gradle生命周期] - rootProject路徑:${rootProject.projectDir}")//Gradle構建生命周期監聽
gradle.addBuildListener(new BuildAdapter() {@Overridevoid settingsEvaluated(Settings settings) {super.settingsEvaluated(settings)println("[Gradle生命周期] - 初始化階段完成")}@Overridevoid projectsEvaluated(Gradle gradle) {super.projectsEvaluated(gradle)println("[Gradle生命周期] - 配置階段完成")//配置階段可以拿到projectgradle.rootProject.childProjects.each {name, pro->println("[Gradle生命周期] - 子工程{ 名稱:$name 路徑:${pro.projectDir} }")}}@Overridevoid buildFinished(BuildResult result) {super.buildFinished(result)println("[Gradle生命周期] - 構建結束")}
})
在app目錄下的build.gradle添加
println("[Gradle生命周期] - 我是app目錄build.gradle")
//配置階段可以拿到project
println("[Gradle生命周期] - { 工程名:${project.name} 工程路徑:${project.projectDir} }")
//project可以拿到很多參數,如父工程,任務等,可以點擊查看源碼
println("[Gradle生命周期] - { 父工程:${project.parent.name} 父工程路徑:${project.parent.projectDir} }")
project.tasks.each {println("[Gradle生命周期] - app子工程中的任務:{ 任務名:${it.name} 任務路徑:${it.path}")
}
在根目錄子的build.gradle添加
println("[Gradle生命周期] - 我是根目錄build.gradle")
//配置階段可以拿到project
println("[Gradle生命周期] - { 工程名:${project.name} 工程路徑:${project.projectDir} }")
//project可以拿到很多參數,如任務等,可以點擊查看源碼
project.tasks.each {println("[Gradle生命周期] - 根目錄工程中的任務:{ 任務名:${it.name} 任務路徑:${it.path}")
}
執行結果
補充:創建任務
在 app目錄的build.gradle中添加
task testTask1() {doLast {println("[Gradle生命周期] - 我是app目錄build.gradle中的testTask1")}
}task testTask2() {//testTask2依賴testTask1dependsOn testTask1doLast {println("[Gradle生命周期] - 我是app目錄build.gradle中的testTask2")}
}
執行命令
./gradlew :app:testTask2 -q
執行結果