----《Android Gradle 權(quán)威指南》學(xué)習(xí)筆記
總目錄:Gradle 學(xué)習(xí)系列 -- 目錄
上一篇:Gradle 任務(wù) -- 任務(wù)的執(zhí)行分析
下一篇:Gradle 任務(wù) -- 任務(wù)的棄用和禁用
其實(shí)并沒(méi)有真正的任務(wù)排序功能,也就是說(shuō)不是通過(guò)設(shè)置優(yōu)先級(jí)或 order 順序?qū)崿F(xiàn)。而是通過(guò)任務(wù)的 shouldRunAfter 和 mustRunAfter 這兩個(gè)方法來(lái)控制一個(gè)任務(wù) 應(yīng)該/必須 在某個(gè)任務(wù)之后執(zhí)行。
通過(guò)這種方式可以在某些情況下控制任務(wù)的執(zhí)行順序,而不是通過(guò)強(qiáng)制依賴的方式。
這個(gè)功能是非常有用的,比如項(xiàng)目中設(shè)置的順序是:必須先執(zhí)行單元測(cè)試,然后才能進(jìn)行集成測(cè)試來(lái)保證軟件的質(zhì)量,測(cè)速完成后再打包上傳發(fā)布等操作。
具體的語(yǔ)法是:
taskB.shouldRunAfter(taskA):taskB 應(yīng)該在 taskA 執(zhí)行之后再執(zhí)行。這里是應(yīng)該,不是必須,所以有可能任務(wù)順序并不會(huì)按預(yù)設(shè)的執(zhí)行。
taskB.mustRunAfter(taskA):taskB 必須在 taskA 執(zhí)行之后再執(zhí)行。舉個(gè)栗子,在 build.gradle 中有以下代碼:
task taskOrder1{
doFirst{
println "<< taskOrder1 doFirst 的打印"
}
doLast{
println "<< taskOrder1 doLast 的打印"
}
}
task taskOrder2{
doFirst{
println "<< taskOrder2 doFirst 的打印"
}
doLast{
println "<< taskOrder2 doLast 的打印"
}
}
// taskOrder1.shouldRunAfter(taskOrder2) // 注釋1
// taskOrder1.mustRunAfter(taskOrder2) // 注釋2
(1) 在命令行中執(zhí)行命令:gradle taskOrder1 taskOrder2
打印結(jié)果:
> Task :taskOrder1
<< taskOrder1 doFirst 的打印
<< taskOrder1 doLast 的打印
> Task :taskOrder2
<< taskOrder2 doFirst 的打印
<< taskOrder2 doLast 的打印
(2) 在命令行中執(zhí)行命令:gradle taskOrder2 taskOrder1
打印結(jié)果:
> Task :taskOrder2
<< taskOrder2 doFirst 的打印
<< taskOrder2 doLast 的打印
> Task :taskOrder1
<< taskOrder1 doFirst 的打印
<< taskOrder1 doLast 的打印
(3) 關(guān)閉注釋1,打開(kāi)注釋2,測(cè)試 shouldRunAfter 語(yǔ)法
在命令行中執(zhí)行命令:gradle taskOrder1 taskOrder2
或,在命令行中執(zhí)行命令:gradle taskOrder2 taskOrder1
打印結(jié)果:
> Task :taskOrder2
<< taskOrder2 doFirst 的打印
<< taskOrder2 doLast 的打印
> Task :taskOrder1
<< taskOrder1 doFirst 的打印
<< taskOrder1 doLast 的打印
未出現(xiàn)任務(wù)亂序的情況
(4) 打開(kāi)注釋1,關(guān)閉注釋2,測(cè)試 mustRunAfter 語(yǔ)法,
在命令行中執(zhí)行命令:gradle taskOrder1 taskOrder2
或,在命令行中執(zhí)行命令:gradle taskOrder2 taskOrder1
打印結(jié)果:
> Task :taskOrder2
<< taskOrder2 doFirst 的打印
<< taskOrder2 doLast 的打印
> Task :taskOrder1
<< taskOrder1 doFirst 的打印
<< taskOrder1 doLast 的打印
未出現(xiàn)任務(wù)亂序的情況