Gradle 任务是通过扩展DefaultTask.

但是,该泛型DefaultTask没有为 Gradle 提供任何操作。如果用户想要扩展 Gradle 及其构建脚本的功能,他们必须使用内置任务或创建自定义任务

  1. 内置任务- Gradle 提供内置实用任务,例如CopyJarZipDelete等...

  2. 自定义任务- Gradle 允许用户子类化DefaultTask以创建自己的任务类型。

创建任务

创建自定义任务最简单、最快捷的方法是在构建脚本中:

要创建任务,请从该类继承DefaultTask并实现@TaskAction处理程序:

构建.gradle.kts
abstract class CreateFileTask : DefaultTask() {
    @TaskAction
    fun action() {
        val file = File("myfile.txt")
        file.createNewFile()
        file.writeText("HELLO FROM MY TASK")
    }
}

CreateFileTask实现了一组简单的操作。首先,在主项目中创建一个名为“myfile.txt”的文件。然后,一些文本被写入该文件。

注册任务

使用该方法在构建脚本中注册任务TaskContainer.register(),然后可以在构建逻辑中使用它。

构建.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")

任务组和描述

设置任务的描述属性可以帮助用户了解如何使用您的任务:

构建.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"
}

将任务添加到组后,在列出任务时即可看到该任务。

任务输入和输出

为了让任务做有用的工作,它通常需要一些输入。任务通常会产生输出

构建.gradle.kts
abstract class CreateFileTask : DefaultTask() {
    @Input
    val fileText = "HELLO FROM MY TASK"

    @Input
    val fileName = "myfile.txt"

    @OutputFile
    val myFile: File = File(fileName)

    @TaskAction
    fun action() {
        myFile.createNewFile()
        myFile.writeText(fileText)
    }
}

tasks.register<CreateFileTask>("createFileTask") {
    group = "custom"
    description = "Create myfile.txt in the current directory"
}

配置任务

使用该方法可以选择在构建脚本中配置任务TaskCollection.named()

该类CreateFileTask已更新,以便文件中的文本是可配置的:

构建.gradle.kts
abstract class CreateFileTask : 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<CreateFileTask>("createFileTask") {
    group = "custom"
    description = "Create myfile.txt in the current directory"
    fileText.convention("HELLO FROM THE CREATE FILE TASK METHOD") // Set convention
}

tasks.named<CreateFileTask>("createFileTask") {
    fileText.set("HELLO FROM THE NAMED METHOD") // Override with custom message
}

在该named()方法中,我们找到createFileTask任务并设置将写入文件的文本。

任务执行时:

$ ./gradlew createFileTask

> Configure project :app

> Task :app:createFileTask

BUILD SUCCESSFUL in 5s
2 actionable tasks: 1 executed, 1 up-to-date

myfile.txt在项目根文件夹中创建一个名为的文本文件:

我的文件.txt
HELLO FROM THE NAMED METHOD

请参阅“开发 Gradle 任务”一章以了解更多信息。

下一步: 了解如何使用插件>>