美文网首页
Gradle 任务 -- 任务排序

Gradle 任务 -- 任务排序

作者: 冯可乐同学 | 来源:发表于2022-01-01 09:37 被阅读0次

    ----《Android Gradle 权威指南》学习笔记

    总目录:Gradle 学习系列 -- 目录

    上一篇:Gradle 任务 -- 任务的执行分析

    下一篇:Gradle 任务 -- 任务的弃用和禁用

    1. 其实并没有真正的任务排序功能,也就是说不是通过设置优先级或 order 顺序实现。而是通过任务的 shouldRunAfter 和 mustRunAfter 这两个方法来控制一个任务 应该/必须 在某个任务之后执行。

    2. 通过这种方式可以在某些情况下控制任务的执行顺序,而不是通过强制依赖的方式。

    3. 这个功能是非常有用的,比如项目中设置的顺序是:必须先执行单元测试,然后才能进行集成测试来保证软件的质量,测速完成后再打包上传发布等操作。

    4. 具体的语法是:
      taskB.shouldRunAfter(taskA):taskB 应该在 taskA 执行之后再执行。这里是应该,不是必须,所以有可能任务顺序并不会按预设的执行。
      taskB.mustRunAfter(taskA):taskB 必须在 taskA 执行之后再执行。

    5. 举个栗子,在 build.gradle 中有以下代码:

    task taskOrder1{
        doFirst{
            println "<< taskOrder1 doFirst 的打印"
        }
        doLast{
            println "<< taskOrder1 doLast 的打印"
        }
    }
    
    task taskOrder2{
        doFirst{
            println "<< taskOrder2 doFirst 的打印"
        }
        doLast{
            println "<< taskOrder2 doLast 的打印"
        }
    }
    
    // taskOrder1.shouldRunAfter(taskOrder2)  // 注释1
    // taskOrder1.mustRunAfter(taskOrder2)    // 注释2
    

    (1) 在命令行中执行命令:gradle taskOrder1 taskOrder2
    打印结果:

     > Task :taskOrder1
    << taskOrder1 doFirst 的打印
    << taskOrder1 doLast 的打印
    
    > Task :taskOrder2
    << taskOrder2 doFirst 的打印
    << taskOrder2 doLast 的打印
    

    (2) 在命令行中执行命令:gradle taskOrder2 taskOrder1
    打印结果:

    > Task :taskOrder2
    << taskOrder2 doFirst 的打印
    << taskOrder2 doLast 的打印
    
    > Task :taskOrder1
    << taskOrder1 doFirst 的打印
    << taskOrder1 doLast 的打印
    

    (3) 关闭注释1,打开注释2,测试 shouldRunAfter 语法
    在命令行中执行命令:gradle taskOrder1 taskOrder2
    或,在命令行中执行命令:gradle taskOrder2 taskOrder1
    打印结果:

    > Task :taskOrder2
    << taskOrder2 doFirst 的打印
    << taskOrder2 doLast 的打印
    
    > Task :taskOrder1
    << taskOrder1 doFirst 的打印
    << taskOrder1 doLast 的打印
    

    未出现任务乱序的情况

    (4) 打开注释1,关闭注释2,测试 mustRunAfter 语法,
    在命令行中执行命令:gradle taskOrder1 taskOrder2
    或,在命令行中执行命令:gradle taskOrder2 taskOrder1
    打印结果:

    > Task :taskOrder2
    << taskOrder2 doFirst 的打印
    << taskOrder2 doLast 的打印
    
    > Task :taskOrder1
    << taskOrder1 doFirst 的打印
    << taskOrder1 doLast 的打印
    

    未出现任务乱序的情况

    相关代码:https://gitee.com/fzq.com/gradle-demos

    相关文章

      网友评论

          本文标题:Gradle 任务 -- 任务排序

          本文链接:https://www.haomeiwen.com/subject/xtgcfrtx.html