【gradle task】 自定义编写注册任务 Writing Tasks
创建任务
创建自定义任务的最简单、最快捷的方式是在构建脚本中:
为了创建一个任务,继承DefaultTask类并实现@TaskAction处理程序:
abstract class CreateFileTask extends DefaultTask {
@TaskAction
void action() {
File file = new File("myfile.txt")
file.createNewFile()
file.writeText("HELLO FROM MY TASK")
}
}
CreateFileTask实现了一组简单的操作。首先,在主项目中创建了一个名为"myfile.txt"的文件。然后,向文件中写入一些文本。
注册任务
使用TaskContainer.register()方法在构建脚本中注册任务,这样就可以在构建逻辑中使用它。
tasks.register(CreateFileTask, "createFileTask")
任务分组和描述
设置任务的group和description属性可以帮助用户理解如何使用任务:
abstract class CreateFileTask extends DefaultTask {
@TaskAction
void action() {
File file = new File("myfile.txt")
file.createNewFile()
file.writeText("HELLO FROM MY TASK")
}
}
tasks.register(CreateFileTask, "createFileTask") {
group = "custom"
description = "在当前目录下创建myfile.txt文件"
}
一旦将任务添加到分组中,在列出任务时它就可见了。
任务输入和输出
为了让任务执行有用的工作,通常需要一些输入。任务通常会产生输出。
abstract class CreateFileTask extends DefaultTask {
@Input
final String fileText = "HELLO FROM MY TASK"
@Input
final String fileName = "myfile.txt"
@OutputFile
final File myFile = new File(fileName)
@TaskAction
void action() {
myFile.createNewFile()
myFile.writeText(fileText)
}
}
tasks.register(CreateFileTask, "createFileTask") {
group = "custom"
description = "在当前目录下创建myfile.txt文件"
}
配置任务
可以使用TaskCollection.named()方法在构建脚本中可选地配置任务。
CreateFileTask类已更新,以使文件中的文本是可配置的:
abstract class CreateFileTask extends 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 = "在当前目录下创建myfile.txt文件"
fileText.convention("HELLO FROM THE CREATE FILE TASK METHOD") // 设置约定
}
tasks.named<CreateFileTask>("createFileTask") {
fileText.set("HELLO FROM THE NAMED METHOD") // 用自定义消息覆盖约定
}
在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
请参考Developing Gradle Tasks章节以了解更多信息。