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
执行结果