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)
任务分组和描述
设置任务的group和description属性可以帮助用户理解如何使用你的任务
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 任务章节了解更多信息。
下一步:学习如何使用插件 >>