創(chuàng)建Task

Task

  • 調用Project的task()方法創(chuàng)建Task
    在使用Gradle時认臊,創(chuàng)建Task最常見的方式便是:
task helloword << {
   println 'hello Gradle!'
}

這里的“<<”表示追加的意思畸陡,即向hello中加入執(zhí)行過程瀑凝。我們還可以使用doLast來達到同樣的效果:

task helloword2 {
  doLast { println 'hello grade 2 !'}
}

另外坦刀,如果需要向Task的最前面加入執(zhí)行過程愧沟,我們可以使用doFirst:

task helloword3 {
  doFirst { println 'hello grade 3 !'}
}

以上我們自定義的3個Task都位于TaskContainer中,Project中的tasks屬性即表示該TaskContainer鲤遥。為此央渣,我們可以新建一個Task來顯示這些信息:

task showTasks {
   println tasks.class
   println tasks.size()
}

輸出結果:


> Configure project :
The Task.leftShift(Closure) method has been deprecated and is scheduled to be removed in Gradle 5.0. Please use Task.doLast(Action) instead.
        at build_dm49rdwdh0ayv2low2to9ie29.run(/Users/liyang/gradle_demo/build.gradle:33)
class org.gradle.api.internal.tasks.DefaultTaskContainer_Decorated
4


BUILD SUCCESSFUL in 0s

  • 通過TaskContainer的create()方法創(chuàng)建Task
    在上文中我們講到,通過task()方法創(chuàng)建的Task都被存放在了TaskContainer中渴频,而Project又維護了一個TaskContainer類型的屬性tasks,那么我們完全可以直接向TaskContainer里面添加Task北启。查查TaskContainer的API文檔可以發(fā)現(xiàn)卜朗,TaskContainer向我們提供了大量重載的create()方法用于添加Task拔第。
tasks.create(name: 'hello4]word4') << {
   println 'hello grade 4 !'
}

輸出結果:


> Configure project :
The Task.leftShift(Closure) method has been deprecated and is scheduled to be removed in Gradle 5.0. Please use Task.doLast(Action) instead.
        at build_dm49rdwdh0ayv2low2to9ie29.run(/Users/liyang/gradle_demo/build.gradle:33)
class org.gradle.api.internal.tasks.DefaultTaskContainer_Decorated
4
hello Gradle 4 !


BUILD SUCCESSFUL in 0s
  • 聲明Task之間的依賴關系

Task之間是可以存在依賴關系,比如TaskA依賴TaskB场钉,那么在執(zhí)行TaskA時蚊俺,Gradle會先執(zhí)行TaskB,再執(zhí)行TaskA逛万。我們可以在定義一個Task的同時聲明它的依賴關系:

task helloword5(dependsOn: helloword2) << {
    println 'hello Gradle 5 !'
}

輸出結果:


> Configure project :
The Task.leftShift(Closure) method has been deprecated and is scheduled to be removed in Gradle 5.0. Please use Task.doLast(Action) instead.
        at build_dm49rdwdh0ayv2low2to9ie29.run(/Users/liyang/gradle_demo/build.gradle:33)
hello Gradle 4 !
class org.gradle.api.internal.tasks.DefaultTaskContainer_Decorated
7

> Task :helloword2
hellow gradle 2 !

> Task :helloword5
hello Gradle 5 !


BUILD SUCCESSFUL in 0s
2 actionable tasks: 2 executed

當然泳猬,我們也可以在定義Task之后再聲明依賴:

task helloword6 << {
    println 'hello Gradle 6 !'
}
hellword6.dependsOn helloword

輸出結果


> Configure project :
The Task.leftShift(Closure) method has been deprecated and is scheduled to be removed in Gradle 5.0. Please use Task.doLast(Action) instead.
        at build_dm49rdwdh0ayv2low2to9ie29.run(/Users/liyang/gradle_demo/build.gradle:33)
hello Gradle 4 !
class org.gradle.api.internal.tasks.DefaultTaskContainer_Decorated
7

> Task :helloword
hello gradle!

> Task :helloword6
hello Gradle 6 !


BUILD SUCCESSFUL in 0s
2 actionable tasks: 2 executed
  • 配置Task

一個Task除了執(zhí)行操作之外,還可以包含多個Property宇植,其中有Gradle為每個Task默認定義的Property得封,比如description,logger等指郁。另外忙上,每一個特定的Task類型還可以含有特定的Property,比如Copy的from和to等闲坎。當然疫粥,我們還可以動態(tài)地向Task中加入額外的Property。在執(zhí)行一個Task之前腰懂,我們通常都需要先設定Property的值梗逮,Gradle提供了多種方法設置Task的Property值。

首先绣溜,我們可以在定義Task的時候對Property進行配置:

task helloword7 << {
    description = "this is helloword 7"
    println description
}

輸出結果:

The Task.leftShift(Closure) method has been deprecated and is scheduled to be removed in Gradle 5.0. Please use Task.doLast(Action) instead.
        at build_dm49rdwdh0ayv2low2to9ie29.run(/Users/liyang/gradle_demo/build.gradle:33)
class org.gradle.api.internal.tasks.DefaultTaskContainer_Decorated
4
hello Gradle 4 !

> Task :helloword7
this is helloword 7


BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed

我們還可以通過調用Task的configure()方法完成Property的設置:

task helloword8 << {
println description
}

helloword8.configure {
description = "this is helloword8"
}

輸出結果:

> Configure project :
The Task.leftShift(Closure) method has been deprecated and is scheduled to be removed in Gradle 5.0. Please use Task.doLast(Action) instead.
        at build_dm49rdwdh0ayv2low2to9ie29.run(/Users/liyang/gradle_demo/build.gradle:33)
class org.gradle.api.internal.tasks.DefaultTaskContainer_Decorated
4
hello Gradle 4 !

> Task :helloword8
this is helloword8

BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末慷彤,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子涮毫,更是在濱河造成了極大的恐慌瞬欧,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件罢防,死亡現(xiàn)場離奇詭異艘虎,居然都是意外死亡,警方通過查閱死者的電腦和手機咒吐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進店門野建,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人恬叹,你說我怎么就攤上這事候生。” “怎么了绽昼?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵唯鸭,是天一觀的道長。 經常有香客問我硅确,道長目溉,這世上最難降的妖魔是什么明肮? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮缭付,結果婚禮上柿估,老公的妹妹穿的比我還像新娘。我一直安慰自己陷猫,他們只是感情好秫舌,可當我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著绣檬,像睡著了一般足陨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上河咽,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天钠右,我揣著相機與錄音,去河邊找鬼忘蟹。 笑死飒房,一個胖子當著我的面吹牛,可吹牛的內容都是我干的媚值。 我是一名探鬼主播狠毯,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼褥芒!你這毒婦竟也來了嚼松?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤锰扶,失蹤者是張志新(化名)和其女友劉穎献酗,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體坷牛,經...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡罕偎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了京闰。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片颜及。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蹂楣,靈堂內的尸體忽然破棺而出俏站,到底是詐尸還是另有隱情,我是刑警寧澤痊土,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布肄扎,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏反浓。R本人自食惡果不足惜萌丈,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望雷则。 院中可真熱鬧,春花似錦肪笋、人聲如沸月劈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽猜揪。三九已至,卻和暖如春坛梁,著一層夾襖步出監(jiān)牢的瞬間而姐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工划咐, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留拴念,地道東北人。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓褐缠,卻偏偏與公主長得像政鼠,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子队魏,可洞房花燭夜當晚...
    茶點故事閱讀 45,500評論 2 359

推薦閱讀更多精彩內容