Gradle

1.5_任务依赖关系和排序

2017-12-28  本文已影响115人  Android_Dev

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

    }

}

上一篇下一篇

猜你喜欢

热点阅读