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