Gradle學習筆記(四)

上一篇日誌,我們搞清楚了基礎的概念以及Hello World,接下來我們繼續學習Gradle。

構建腳本代碼:
Gradle構建腳本將向你展示Groovy的所有出色的功能,接下來看看它強大的功能:
Example:在Gradle的任務(tasks)中使用Groovy語言
build.gradle
task upper <<{
	String str = 'gradle and groovy'
	println "Original:"+str
	println "Upper case:"+str.toUpperCase()
}

保存文件,輸入命令行:gradle -q  upper
運行完之後將會輸出:
Original:  gradle and groovy
Upper case:  GRADLE AND GROOVY
或者看看這個例子:
task count <<{
	4.times {print "$it "}
}
注意4後面是  . (英文句 號)。
保存文件,輸入命令行:gradle -q  count
將會輸出:0  1  2   3

任務依賴:
就像你猜想的那樣,你可以聲明一個任務,而這個任務依賴於其他的任務。
Example:
build.gradle
task hello <<{
	println 'Hello World'
}
task intro(dependsOn:hello) << {
	println "I'm Gradle";
}
注意:第二個輸出使用雙引號引起來的,因爲 I 後面有一個單引號。
保存文件,輸入命令行:gradle -q  intro
將會輸出:
Hello World
Im Gradle
解釋:因爲intro 依賴 hello,所以輸入命令執行intro 時會先執行它的依賴 hello。
再加入一個依賴之前,這個依賴任務不需要提前定義,接下來看一個例子:
build.gradle
task taskX(dependsOn:'taskY') << {
	println 'taskX';
}
task taskY << {
	println "taskY"
}
保存文件,輸入命令行:gradle -q  taskX
將會輸出:
taskY
taskX
注意:有人會注意到如果去掉  task taskX(dependsOn:'taskY')  中 taskY 的引號,還能不能得到正確的結果,筆者經過實戰,發現去掉之後執行腳本會報以下錯誤:

根據筆者的經驗,可能是因爲加了 引號 ,在進行任務依賴時會查找整個build.gradle 文件,而如果不使用引號,那麼依賴taskY必須先於taskX 定義。(筆者實驗過把taskY定義在前面,發現可以正確執行)

taskX與taskY之間的依賴,在taskY定義之前就聲明好了,這一點對我們後面的多任務構建非常重要,更多的任務依賴詳情將會在後面進一步討論。
請注意,當所關聯的任務還沒有定義時,你不能使用快捷的去依賴一個任務。(這句話的意思可能就是在上面提到的加引號和不加引號的區別)
動態任務(Dynamic tasks)
Groovy 的強大功能不僅僅用於定義一個任務應該幹什麼。例如,它可以用來動態的創建任務:
build.gradle
4.times{ counter ->
	task "task$counter" << {
		println "I'm task number $counter"
	}
}
保存文件,輸入命令行:gradle -q  task1
會輸出:
>gradle -q task1
I'm task number 1

操縱已經存在的任務(Manipulating existing tasks)
一旦一個任務創建了,可以通過一個API 來訪問它。例如:你可用用它來在運行時動態的爲一個任務添加依賴。而 Ant 卻沒有這樣的 功能。
build.gradle
4.times{ counter ->
	task "task$counter" << {
		println "I'm task number $counter"
	}
}
task0.dependsOn task2,task3
gradle -q   task0的輸出爲:
gradle -q task0
I'm task number 2
I'm task number 3
I'm task number 0
或者你可以給一個存在的任務添加行爲,例子如下:
build.gradle
task hello << {
	println 'Hello Earth'
}
hello.doFirst{
	println 'Hello Venus'
}
hello.doLast{
	println 'Hello Mars'
}
hello << {
	println 'Hello Jupiter'
}
執行命令 gradle  -q  hello 的結果如下:
>gradle -q hello
Hello Venus
Hello Earth
Hello Mars
Hello Jupiter

doFirst和doLast的調用可以執行多次,它們的調用會在相應任務的動作列表的開頭和結尾加入一個動作,當一個任務執行的時候,會按順序依次執行動作列表中的各個動作。操作符 <<   相當於是  doLast的一個別名。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章