Gradle常用文件目录
Gradle 构建的生命周期,有3个阶段:
- 初始化阶段
- 配置阶段
- 执行阶段
1、初始化阶段
- Gradle 支持构建单个工程个多个子工程,初始化阶段主要负责收集所有参与本次构建的子工程,创建一个项目的层次结构,并未每个项目创建一个 project 实例。与该阶段关系最大的就是根目录下的 setting.gradle 文件。
可以在 setting.gradle中添加Gradle构建生命周期监听
setting.gradle
println("[Gradle生命周期] - 我是 setting.gradle")
//Gradle构建生命周期监听
gradle.addBuildListener(new BuildAdapter() {
@Override
void settingsEvaluated(Settings settings) {
super.settingsEvaluated(settings)
println("[Gradle生命周期] - 初始化阶段完成")
}
@Override
void projectsEvaluated(Gradle gradle) {
super.projectsEvaluated(gradle)
println("[Gradle生命周期] - 配置阶段完成")
}
@Override
void 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() {
@Override
void settingsEvaluated(Settings settings) {
super.settingsEvaluated(settings)
println("[Gradle生命周期] - 初始化阶段完成")
}
@Override
void projectsEvaluated(Gradle gradle) {
super.projectsEvaluated(gradle)
println("[Gradle生命周期] - 配置阶段完成")
//配置阶段可以拿到project
gradle.rootProject.childProjects.each {name, pro->
println("[Gradle生命周期] - 子工程{ 名称:$name 路径:${pro.projectDir} }")
}
}
@Override
void 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依赖testTask1
dependsOn testTask1
doLast {
println("[Gradle生命周期] - 我是app目录build.gradle中的testTask2")
}
}
执行命令
./gradlew :app:testTask2 -q
执行结果