1.5_任务依赖关系和排序

到这里,我们已经会定义一个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!"

    }

}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前一段时间看到不少人在技术论坛里问「刚学 Android 不久,对 Gradle 不懂,看了很多资料依然一知半解」...
    f9dd77add98e阅读 8,881评论 1 8
  • 这篇文章讲给大家带来gradle打包系列中的高级用法-自己动手编写gradle插件。我们平常在做安卓开发时,都会在...
    呆萌狗和求疵喵阅读 16,165评论 22 80
  • 参考资料:http://gold.xitu.io/post/580c85768ac247005b5472f9htt...
    zhaoyubetter阅读 13,779评论 0 6
  • 导语: 随着技术的发展,不管是前端开发、服务端开发或者是移动端开发(移动也是前端的一个分支)中都会用到自动化构建工...
    伊始雨深阅读 8,159评论 0 4
  • Iphone打客服电话 客服给的解决办法: 此时,你打开iTunes,有一根数据线. 好,开始操作,手机处于开机状...
    汾酒iOSer阅读 2,688评论 0 1