gradle 学习之生命周期

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 "执行完成"
    }
}
    原文作者:虫二无边
    原文地址: https://www.jianshu.com/p/0ce9d4a4715e
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞