Gradle 任務是透過擴展 DefaultTask
來建立的。
然而,通用的 DefaultTask
沒有為 Gradle 提供任何動作。如果使用者想要擴展 Gradle 及其建置腳本的功能,他們必須使用內建任務或建立自訂任務
-
內建任務 - Gradle 提供了內建的實用任務,例如
Copy
、Jar
、Zip
、Delete
等等… -
自訂任務 - Gradle 允許使用者子類別化
DefaultTask
以建立他們自己的任務類型。
建立任務
建立自訂任務最簡單和最快速的方法是在建置腳本中
要建立任務,請繼承 DefaultTask
類別並實作 @TaskAction
處理器
build.gradle.kts
abstract class CreateFileTask : DefaultTask() {
@TaskAction
fun action() {
val file = File("myfile.txt")
file.createNewFile()
file.writeText("HELLO FROM MY TASK")
}
}
build.gradle
class CreateFileTask extends DefaultTask {
@TaskAction
void action() {
def file = new File("myfile.txt")
file.createNewFile()
file.text = "HELLO FROM MY TASK"
}
}
CreateFileTask
實作了一組簡單的動作。首先,在主要專案中建立一個名為 "myfile.txt" 的檔案。然後,將一些文字寫入檔案。
註冊任務
任務是使用 TaskContainer.register()
方法在建置腳本中註冊的,這使其可以在建置邏輯中使用。
build.gradle.kts
abstract class CreateFileTask : DefaultTask() {
@TaskAction
fun action() {
val file = File("myfile.txt")
file.createNewFile()
file.writeText("HELLO FROM MY TASK")
}
}
tasks.register<CreateFileTask>("createFileTask")
build.gradle
class CreateFileTask extends DefaultTask {
@TaskAction
void action() {
def file = new File("myfile.txt")
file.createNewFile()
file.text = "HELLO FROM MY TASK"
}
}
tasks.register("createFileTask", CreateFileTask)
任務群組和描述
在您的任務上設定群組和描述屬性可以幫助使用者理解如何使用您的任務
build.gradle.kts
abstract class CreateFileTask : DefaultTask() {
@TaskAction
fun action() {
val file = File("myfile.txt")
file.createNewFile()
file.writeText("HELLO FROM MY TASK")
}
}
tasks.register<CreateFileTask>("createFileTask") {
group = "custom"
description = "Create myfile.txt in the current directory"
}
build.gradle
class CreateFileTask extends DefaultTask {
@TaskAction
void action() {
def file = new File("myfile.txt")
file.createNewFile()
file.text = "HELLO FROM MY TASK"
}
}
tasks.register("createFileTask", CreateFileTask) {
group = "custom"
description = "Create myfile.txt in the current directory"
}
一旦任務被添加到群組,它在列出任務時是可見的。
任務輸入和輸出
為了讓任務執行有用的工作,它通常需要一些輸入。任務通常會產生輸出。
build.gradle.kts
abstract class CreateAFileTask : DefaultTask() {
@get:Input
abstract val fileText: Property<String>
@Input
val fileName = "myfile.txt"
@OutputFile
val myFile: File = File(fileName)
@TaskAction
fun action() {
myFile.createNewFile()
myFile.writeText(fileText.get())
}
}
build.gradle
abstract class CreateAFileTask extends DefaultTask {
@Input
abstract Property<String> getFileText()
@Input
final String fileName = "myfile.txt"
@OutputFile
final File myFile = new File(fileName)
@TaskAction
void action() {
myFile.createNewFile()
myFile.text = fileText.get()
}
}
配置任務
任務是使用 TaskCollection.named()
方法在建置腳本中選擇性地配置的。
更新 CreateAFileTask
類別,以便檔案中的文字是可配置的
build.gradle.kts
abstract class CreateAFileTask : DefaultTask() {
@get:Input
abstract val fileText: Property<String>
@Input
val fileName = "myfile.txt"
@OutputFile
val myFile: File = File(fileName)
@TaskAction
fun action() {
myFile.createNewFile()
myFile.writeText(fileText.get())
}
}
tasks.register<CreateAFileTask>("createAFileTask") {
group = "custom"
description = "Create myfile.txt in the current directory"
fileText.convention("HELLO FROM THE CREATE FILE TASK METHOD") // Set convention
}
tasks.named<CreateAFileTask>("createAFileTask") {
fileText.set("HELLO FROM THE NAMED METHOD") // Override with custom message
}
build.gradle
abstract class CreateAFileTask extends DefaultTask {
@Input
abstract Property<String> getFileText()
@Input
final String fileName = "myfile.txt"
@OutputFile
final File myFile = new File(fileName)
@TaskAction
void action() {
myFile.createNewFile()
myFile.text = fileText.get()
}
}
tasks.register("createAFileTask", CreateAFileTask) {
group = "custom"
description = "Create myfile.txt in the current directory"
fileText.convention("HELLO FROM THE CREATE FILE TASK METHOD") // Set convention
}
tasks.named("createAFileTask", CreateAFileTask) {
fileText.set("HELLO FROM THE NAMED METHOD") // Override with custom message
}
在 named()
方法中,我們找到 createAFileTask
任務並設定將寫入檔案的文字。
當任務執行時
$ ./gradlew createAFileTask
> Configure project :app
> Task :app:createAFileTask
BUILD SUCCESSFUL in 5s
2 actionable tasks: 1 executed, 1 up-to-date
名為 myfile.txt
的文字檔在專案根資料夾中建立
myfile.txt
HELLO FROM THE NAMED METHOD
請參閱開發 Gradle 任務章節以了解更多資訊。
下一步: 學習如何使用外掛 >>