※三種宣告
task 'xxx' { // 「'」可省略
println 'xxxxx'
}
tasks.create('zzz') {
println 'zzzzz'
}
tasks.create(name: 'ooo') {
println 'ooooo'
}
task findTask {
// println tasks.findByPath('xxx')?.name
try {
println tasks.getByPath('xxx').name // 有Exception時,? 無效
} catch (UnknownTaskException e) {
println '我錯了'
}
}
※findByPath 找不到回傳 null; getByPath 找不到拋例外
※task 群組
task setInfo1(group: 'aaa', description: 'I am 1') {
println tasks.findByPath('setInfo1')?.group // group 即可抓到,但 this.group 是抓這個專案的
println tasks.findByPath('setInfo1')?.description
}
task setInfo2 {
setGroup('aaa')
setDescription('I am 2')
println tasks.findByPath('setInfo2')?.group
println tasks.findByPath('setInfo2')?.description
}
※gradle tasks 會看到,參數可看 Task
※task 的執行順序
task taskOrder1() {
println 'taskOrder1'
doLast {
println 'a'
}
doFirst {
println '1'
}
doLast {
println 'b'
}
doFirst {
println '2'
}
}
task taskOrder2 {
println 'taskOrder2'
doLast {
println 'c'
}
doFirst {
println '3'
}
doLast {
println 'd'
}
doFirst {
println '4'
}
}
※doFirst、doLast 都是執行階段才會執行,所以下 gradle clean 或 gradle task 名稱只會執行設定階段,並不會只有執行指定的 task,所有 task 都會執行
要 run 執行階段,要下 gradle task 名稱,但要有 doFirst 或 doLast,且只會執行指定的 task
※task taskOrder1(dependsOn: 'taskOrder2') // 只針對執行階段
※taskOrder1.dependsOn('taskOrder2'),也可用這種方式,寫在括號裡是被依賴的,被依賴的會先執行
※也可以 mustRunAfter 方法
※動態依賴
task taskOrder1 {
dependsOn tasks.findAll {
it.name.startsWith('xxx')
}
}
※xxx 開頭的 task 才會被依賴
※task 的其他寫法
task taskOrder1 {
doFirst {
println '1'
}
doFirst {
println '2'
}
}
taskOrder1.doFirst {
println '3'
}
※
※doLast 等同 <<
task taskOrder2 << {
println 'taskOrder2'
}
task taskOrder2 {
println 'taskOrder2'
doLast {
println '3'
}
doFirst {
println '2'
}
} << {
println '4'
}
※最後的 << 只能一次
沒有留言:
張貼留言