Gradle學(xué)習(xí)系列之四——增量式構(gòu)建

轉(zhuǎn)自:http://www.cnblogs.com/davenkin/p/gradle-learning-4.html

請通過以下方式下載本系列文章的Github示例代碼:

git clone https://github.com/davenkin/gradle-learning.git

如果我們將Gradle的Task看作一個黑盒子兼吓,那么我們便可以抽象出輸入和輸出的概念凰慈,一個Task對輸入進行操作妈橄,然后產(chǎn)生輸出眉踱。比如谦炒,在使用java插件編譯源代碼時裸删,輸入即為Java源文件兼呵,輸出則為class文件满败。如果多次執(zhí)行一個Task時的輸入和輸出是一樣的贴铜,那么我們便可以認為這樣的Task是沒有必要重復(fù)執(zhí)行的粪摘。此時,反復(fù)執(zhí)行相同的Task是冗余的绍坝,并且是耗時的徘意。

為了解決這樣的問題,Gradle引入了增量式構(gòu)建的概念轩褐。在增量式構(gòu)建中椎咧,我們?yōu)槊總€Task定義輸入(inputs)和輸入(outputs),如果在執(zhí)行一個Task時,如果它的輸入和輸出與前一次執(zhí)行時沒有發(fā)生變化勤讽,那么Gradle便會認為該Task是最新的(UP-TO-DATE)蟋座,因此Gradle將不予執(zhí)行。一個Task的inputs和outputs可以是一個或多個文件脚牍,可以是文件夾向臀,還可以是Project的某個Property,甚至可以是某個閉包所定義的條件诸狭。

每個Task都擁有inputs和outputs屬性券膀,他們的類型分別為TaskInputs和TaskOutputs。在下面的例子中驯遇,我們展示了這么一種場景:名為combineFileContent的Task從sourceDir目錄中讀取所有的文件三娩,然后將每個文件的內(nèi)容合并到destination.txt文件中。讓我們先來看看沒有定義Task輸入和輸出的情況:

task combineFileContentNonIncremental {

????def sources = fileTree('sourceDir')

????def destination = file('destination.txt')

????doLast {

????????destination.withPrintWriter {writer ->

????????????sources.each {source ->

????????????????writer.println source.text

????????????}

????????}

????}

}

多次執(zhí)行“gradle combineFileContentNonIncremental”時妹懒,整個Task都會反復(fù)執(zhí)行雀监,即便在第一次執(zhí)行后我們已經(jīng)得到了所需的結(jié)果。如果該combineFileContentNonIncremental是一個繁重的Task眨唬,那么多次重復(fù)執(zhí)行勢必造成沒必要的時間耗費会前。

這時,我們可以將sources聲明為該Task的inputs匾竿,而將destination聲明為outputs瓦宜,重新創(chuàng)建一個Task如下:

task combineFileContentIncremental {

????def sources = fileTree('sourceDir')

????def destination = file('destination.txt')

????inputs.dir sources

????outputs.file destination

????doLast {

????????destination.withPrintWriter { writer ->

????????????sources.each {source ->

????????????????writer.println source.text

????????????}

????????}

????}

}

相比之下,后一個Task只比前一個Task多了兩行代碼:

inputs.dir sources

outputs.file destination

當首次執(zhí)行combineFileContentIncremental時岭妖,Gradle會完整地執(zhí)行該Task临庇。但是緊接著再執(zhí)行一次,命令行顯示:

:combineFileContentIncremental UP-TO-DATE

BUILD SUCCESSFUL

Total time: 2.104 secs

我們發(fā)現(xiàn)昵慌,combineFileContentIncremental被標記為UP-TO-DATE假夺,表示該Task是最新的,Gradle將不予執(zhí)行斋攀。在實際應(yīng)用中已卷,你將遇到很多這樣的情況,因為Gradle的很多插件都引入了增量式構(gòu)建機制淳蔼。

如果我們修改了inputs(即sourceDir文件夾)中的任何一個文件或刪除掉了destination.txt侧蘸,當調(diào)用“gradle combineFileContentIncremental”時,Gradle又會重新執(zhí)行鹉梨,因為此時的Task已經(jīng)不再是最新的了讳癌。對于outputs,我們還可以使用upToDateWhen()方法來決定一個Task的outputs是否為最新的存皂,該方法接受一個閉包作為檢查條件晌坤,感興趣的讀者可以自行了解。

在下一篇文章中,我們將講到如何自定義Project的Property泡仗。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市猜憎,隨后出現(xiàn)的幾起案子娩怎,更是在濱河造成了極大的恐慌,老刑警劉巖胰柑,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件截亦,死亡現(xiàn)場離奇詭異,居然都是意外死亡柬讨,警方通過查閱死者的電腦和手機崩瓤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來踩官,“玉大人却桶,你說我怎么就攤上這事≌崮担” “怎么了颖系?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長风题。 經(jīng)常有香客問我衬鱼,道長糟秘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任趁啸,我火速辦了婚禮,結(jié)果婚禮上督惰,老公的妹妹穿的比我還像新娘不傅。我一直安慰自己,他們只是感情好赏胚,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布蛤签。 她就那樣靜靜地躺著,像睡著了一般栅哀。 火紅的嫁衣襯著肌膚如雪震肮。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天留拾,我揣著相機與錄音戳晌,去河邊找鬼。 笑死痴柔,一個胖子當著我的面吹牛沦偎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼豪嚎,長吁一口氣:“原來是場噩夢啊……” “哼搔驼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起侈询,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤舌涨,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后扔字,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體囊嘉,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年革为,在試婚紗的時候發(fā)現(xiàn)自己被綠了扭粱。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡震檩,死狀恐怖琢蛤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情抛虏,我是刑警寧澤虐块,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站嘉蕾,受9級特大地震影響贺奠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜错忱,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一儡率、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧以清,春花似錦儿普、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至勒葱,卻和暖如春浪汪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背凛虽。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工死遭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人凯旋。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓呀潭,卻偏偏與公主長得像钉迷,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子钠署,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內(nèi)容