參考文章:html
目錄segmentfault
cmd: gradle -q [taskname]api
-q 表示不打印輸出日誌信息。即僅顯示結果。閉包
task有兩個生命週期,配置階段和執行階段。post
1. << (追加) * 在gradle5.0後會被去掉,建議使用doLast代替。學習
即向任務名追加執行過程。gradle
task hello << { println 'hello, this world' }
2. doLast(執行時加載)和doFirst(配置時加載)ui
task hello{ doLast{ println "I'm this last" } doFirst{ println "I'm this first" } }
3. tasksthis
全部的task都存在一個TaskContainer容器中,是Project的屬性。可建立task來查看url
task showTask{ println tasks.class println tasks.size() } ------------------------------------------------ class org.gradle.api.internal.tasks.DefaultTaskContainer_Decorated 3
4. create
可經過TaskContainer的建立方法來構造task
tasks.create(name:'createTask') { println "i create my task..." }
5.dependsOn
task之間的依賴
tasks.create(name:'createTask',dependsOn:'hello') { println "i create my task..." }
或
[taskname].dependsOn [taskname]
6.task的屬性(Properties)定義
每一個task有兩個默認的屬性 description和 logger,
特定Task會有額外的一些屬性(例:Copy有from和to屬性)。
使用ext自定義properties
task hello{ doLast{ println hell println hell2 } } hello { ext.hell = "Hell........" ext.hell2 = "Hell2...." description = "description is default's Properties" }
@Optional:表示定義項可選
@TaskAction 表示task要執行的過程
class MyDefineTask extends DefaultTask{ @Optional String message; @TaskAction def hello(){ println "my defined message: $message " } } task helloMy(type: MyDefineTask){ message = "hello world.." } task DefineHello(type: MyDefineTask){ message = " my defined...." }
Gradle在默認狀況下已經爲Project定義了不少Property,其中比較經常使用的有:
1. 自定義Properties(使用ext):
ext{ pro1="I'm defined pro1" } 或 ext.pro2 = "I'm defined pro2" println pro2
Closure(閉包)是一段單獨的代碼塊,它能夠接收參數,返回值,也能夠被賦值給變量。即將一段代碼段賦值給一個變量,
能夠在調用的地方被使用。<< (Closure) 在gradle5.0已經不被使用,Action代替。
Closure cl = { task -> println "I'm $task.project.name"} task hello2 << cl project(':MavenCore') { task hello2 << cl } project(':MavenView') { task hello2 << cl }
Closure cl = {task -> println "I'm $task.project.name"}
task hello2{doLast cl}
Action指一段代碼段 ,一個Task由多個Action組成。