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")
}
}
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.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.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
类已更新,以便可以配置文件中的文本
build.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
的文本文件
myfile.txt
HELLO FROM THE NAMED METHOD
查阅开发 Gradle 任务章节以了解更多信息。
下一步: 了解如何使用插件 >>