settings.gradle
println '=====在初始化阶段执行===='
build.gradle
println '=====在配置阶段执行===='
task configured {
println '=====也在配置阶段执行====='
}
task test << {
println '======运行阶段执行====='
}
task testBoth {
doFirst {
println '======在task运行之前执行======'
}
doLast {
println '======在task运行之后执行======'
}
println '======在配置阶段执行======'
}
看上面的代码就很清晰了, gradle生命周期分三个阶段
initialization: 初始化阶段, 其实就是settings.gradle
configuration: 配置阶段, 其实就是解析每个project 的build.gradle, 形成有向图, 描述project task之间的依赖关系
execution:运行阶段, 即task真正运行阶段
在每个阶段之间都可以通过hook加入自己要执行的逻辑
项目评估 project evaluation 阶段
说白了就是子啊project 有向图建立完之后的一个阶段
下面这个例子, 在project的有向图建立完之后, 你可以认为configuration执行完之后, 判断所有的project, 如果hasTests属性为true, 则动态增加test1 task
allprojects {
afterEvaluate { project ->
if (project.hasTests) {
println "增加 test1 task to $project"
project.task('test1') << {
println "运行test"
}
}
}
}
判断evaluation结果
gradle.afterProject {project, projectState ->
if (projectState.failure) {
println "Evaluation of $project FAILED"
} else {
println "Evaluation of $project succeeded"
}
}
这里的gradle.afterProject 是在project 评估之后立马执行的, projectState 判断评估结果
Task 运行阶段
task ok
task broken(dependsOn: ok) << {
throw new RuntimeException('broken')
}
gradle.taskGraph.beforeTask { Task task ->
println "开始执行 $task ..."
}
gradle.taskGraph.afterTask { Task task, TaskState state ->
if (state.failure) {
println "执行失败"
}
else {
println "执行完成"
}
}