※三種宣告
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' }
※最後的 << 只能一次
沒有留言:
張貼留言