首页 > 解决方案 > 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 {...}. 我怎样才能做到这一点?

标签: javagradle

解决方案


这不是 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) {
    // ... 
}

推荐阅读