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