創建Task

Task

  • 調用Project的task()方法創建Task
    在使用Gradle時,創建Task最常見的方式便是:
task helloword << {
   println 'hello Gradle!'
}

這里的“<<”表示追加的意思,即向hello中加入執行過程。我們還可以使用doLast來達到同樣的效果:

task helloword2 {
  doLast { println 'hello grade 2 !'}
}

另外,如果需要向Task的最前面加入執行過程,我們可以使用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()方法創建Task
    在上文中我們講到,通過task()方法創建的Task都被存放在了TaskContainer中,而Project又維護了一個TaskContainer類型的屬性tasks,那么我們完全可以直接向TaskContainer里面添加Task。查查TaskContainer的API文檔可以發現,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,那么在執行TaskA時,Gradle會先執行TaskB,再執行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除了執行操作之外,還可以包含多個Property,其中有Gradle為每個Task默認定義的Property,比如description,logger等。另外,每一個特定的Task類型還可以含有特定的Property,比如Copy的from和to等。當然,我們還可以動態地向Task中加入額外的Property。在執行一個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
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容