java - Gradle 名称绑定任务类型
问题描述
当使用名称创建任务时jar
,Gradle 会自动知道任务的类是org.gradle.api.tasks.bundling.Jar
. 如何使用我的自定义任务复制它?
即我有以下课程:
class MyTaskType extends DefaultTask {
@Input String name
// Options
@TaskAction
def generateImage() {
// Stuff
}
}
到目前为止,我一直在做以下事情:
task veryCoolTaskName(type:MyTaskType) {
name 'some-name'
}
我希望能够通过编写来定义这种类型的任务:
myTaskType {
name 'some-name'
}
就像jar {...}
. 我怎样才能做到这一点?
解决方案
这不是 Gradle 的工作方式。
编写时jar { ... }
,您实际上并没有创建新任务。jar
相反,您引用的是由插件(例如Java 插件)创建的现有任务:
plugins {
id 'java'
}
jar {
// This works because the task was created by the plugin
}
如果没有应用任何插件,相同的摘录将失败,因为名为的任务jar
不存在:
jar {
// This fails, because the task `jar` does not exist
}
相反,您需要创建任务来配置它:
task jar(type: Jar)
jar {
// This works because the task was created beforehand
}
当然,可以将任务的创建和配置结合起来:
task jar(type: Jar) {
// ...
}