Gradle 任務(wù) -- 任務(wù)排序

----《Android Gradle 權(quán)威指南》學(xué)習(xí)筆記

總目錄:Gradle 學(xué)習(xí)系列 -- 目錄

上一篇:Gradle 任務(wù) -- 任務(wù)的執(zhí)行分析

下一篇:Gradle 任務(wù) -- 任務(wù)的棄用和禁用

  1. 其實(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í)行。

  2. 通過(guò)這種方式可以在某些情況下控制任務(wù)的執(zhí)行順序,而不是通過(guò)強(qiáng)制依賴的方式。

  3. 這個(gè)功能是非常有用的,比如項(xiàng)目中設(shè)置的順序是:必須先執(zhí)行單元測(cè)試,然后才能進(jìn)行集成測(cè)試來(lái)保證軟件的質(zhì)量,測(cè)速完成后再打包上傳發(fā)布等操作。

  4. 具體的語(yǔ)法是:
    taskB.shouldRunAfter(taskA):taskB 應(yīng)該在 taskA 執(zhí)行之后再執(zhí)行。這里是應(yīng)該,不是必須,所以有可能任務(wù)順序并不會(huì)按預(yù)設(shè)的執(zhí)行。
    taskB.mustRunAfter(taskA):taskB 必須在 taskA 執(zhí)行之后再執(zhí)行。

  5. 舉個(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ù)亂序的情況

相關(guān)代碼:https://gitee.com/fzq.com/gradle-demos
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容