美文网首页Gradle
1.5_任务依赖关系和排序

1.5_任务依赖关系和排序

作者: Android_Dev | 来源:发表于2017-12-28 21:15 被阅读115次

到这里,我们已经会定义一个task了,这一节我们讨论下task与task之前的关系

例如:在 java build过程中,我们不可能打jar包放在编译源码之前

我们将讨论配置task关系的如下三种方面:

1."dependsOn" 2."finalizedBy" 3."mustRunAfter"

1."dependsOn":

Task A 'dependsOn' task B,意思是如果task B 没有完成的话, task A不成执行它的任务.

例如:你必须先穿上袜子后,才能穿鞋

task putOnSocks {

    doLast {

        println "Putting on Socks."

    }

}

task putOnShoes {

    dependsOn "putOnSocks"

    doLast {

        println "Putting on Shoes."

    }

}

Note:需要注意一点是当你执行"gradle tasks"时,你是看不到'putOnSocks' 的,这是因为gradle 认为'putOnSocks'的存在是为'putOnShoes'做准备的.如果仍然要看到,可以执行"gradle tasks --all"命令

2."finalizedBy":

Task A is `finalizedBy` task B是如果每次执行Task A,Task B 都会在其之后执行.

例如:每次吃完早餐后,要刷牙

task eatBreakfast {

    finalizedBy "brushYourTeeth"

    doLast{

        println "Om nom nom breakfast!"

    }

}

task brushYourTeeth {

    doLast {

        println "Brushie Brushie Brushie."

    }

}

3."mustRunAfter":

这个关系看起来不是那么明显的见明知意,当我运行一个可能失败的流程,像部署一个代码到持续集成的服务端时,同时我们也会运行一个像单元测试一样的小的很可能失败任务,这两个任务没有关系,但我们想单元测试任务运行在集成测试之前,且两个都执行,这个时候就可以用"mustRunAfter".

例如:洗澡和喷香水,洗澡不要求喷香水,喷香水前也不要求先洗澡,但当我们将两者放在一起时,我们都希望洗完澡后,喷香水

task takeShower {

    doLast {

        println "Taking a shower."

    }    

}

task putOnFragrance {

    shouldRunAfter "takeShower"

    doLast{

        println "Smellin' fresh!"    

    }

}

接下来,当我们执行"gradle putOnFragrance takeShower"时,我们确实看到他们是按一定顺序执行的

当然,一个任务可以同时依赖多个任务

task getReady {

    // Remember that when assigning a collection to a property, we need the

    // equals sign

    dependsOn = ["takeShower", "eatBreakfast", "putOnShoes"]

}

当然,我们洗完澡后才去穿上鞋,可以用 "mustRunAfter"

    putOnShoes.mustRunAfter takeShower

// 除此之个,一个更高级的语法,可以去选你想依赖的task 如下例

task getEquipped {

    dependsOn tasks.matching{ task -> task.name.startsWith("putOn")}

    doLast {

        println "All geared up!"

    }

}

相关文章

  • 1.5_任务依赖关系和排序

    到这里,我们已经会定义一个task了,这一节我们讨论下task与task之前的关系 例如:在 java build...

  • Python拓扑排序

    拓扑排序 几乎在所有的项目,甚至日常生活,待完成的不同任务之间通常都会存在着某些依赖关系,这些依赖关系会为它们的执...

  • 拓扑排序

    拓扑排序是基于依赖关系的节点,根据依赖关系而生成的序列。节点和依赖关系往往要生成有向无环图。类似的问题有:穿衣服裤...

  • Jaeger依赖分析

    一、依赖任务 1.1 k8s运行任务 1.2 查看任务状态 1.3 依赖关系结果 二、依赖任务实现 io.jaeg...

  • Gradle教程系列 —— 构建生命周期

    Gradle的核心是基于依赖的编程语言。这意味着我们可以定义任务和任务之间的依赖关系。Gradle保证这些任务按其...

  • 43|拓扑排序:如何确定代码源文件的编译依赖关系?

    43|拓扑排序:如何确定代码源文件的编译依赖关系?

  • UML

    关系有:关联、依赖、组合、聚合、实现、泛化强弱排序:组合>聚合>关联>依赖符号表示:关联:实体箭头依赖:虚体箭头组...

  • 《数据结构与算法之美》笔记009

    43. | 拓扑排序:如何确定代码源文件的编译依赖关系 - 开始 编译器如何通过源文件两两之间的局部依赖关系,确定...

  • ControlFlow(2)--auto

    auto用来处理有依赖关系的多个任务的执行。比如某些任务之间彼此独立,可以并行执行;但某些任务依赖于其它某些任务,...

  • 《算法精解:C语言描述》笔记(排序)

    第12章 排序和搜索 通常有两种排序方法:升序排列和降序排列排序算法分为两大类:比较排序和线性时间排序比较排序依赖...

网友评论

    本文标题:1.5_任务依赖关系和排序

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