美文网首页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_任务依赖关系和排序

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