Gradle插件开发错误传递参数

时间:2014-12-05 02:00:28

标签: plugins groovy gradle build.gradle

我正在尝试按照此处的示例创建自定义gradle插件:http://www.javacodegeeks.com/2012/08/gradle-custom-plugin.html。只要我不尝试为任务提供参数,一切正常,但是当我尝试添加参数时,我收到以下错误:

  

错误:(26,0)类型'com.jwoolston.finalizer.gradle.FinalizerTask_Decorated'的任务已直接实例化,不受支持。任务只能使用DSL创建。

我用谷歌搜索了它,但我似乎没有得到任何与我的情况相关的结果(至少不是我理解的。

插件短标识在生成的jar清单中声明为:finalizer-plugin

我有以下文件:

FinalizerPlugin.groovy

class FinalizerArgumentExtension {
    String path = ''
}

class FinalizerPlugin implements Plugin<Project> {

    @Override
    void apply(Project project) {
        project.extensions.create('finalizeArgs', FinalizerArgumentExtension)
        project.task('finalizeTask', type: FinalizerTask)
    }
}

FinalizerTask.groovy

class FinalizerTask extends DefaultTask {

    @TaskAction
    def executeTask() {
        println "------------executeTask-------------------"
        println "Source Directory : ${project.finalizeArgs.path}"
    }
}

利用项目的 build.gradle 的插件相关内容:

apply plugin: 'java'
apply plugin: 'maven'

version = '1.0.0'

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.11'
}

buildscript {
    repositories {
        maven {
            url uri("file://C:\\Users\\ideal\\.m2\\repository")
        }
    }
    dependencies {
        classpath group: 'com.jwoolston.finalizer',
                name: 'gradle',
                version: '1.0.1-SNAPSHOT'
    }
}

apply plugin: 'finalizer-plugin'

finalizeArgs {
    path = "src/main/java"
}

总之,我不明白错误。我可以说,一切都与教程相符。我试图简单地将一个字符串参数传递给插件的任务。

1 个答案:

答案 0 :(得分:-1)

插件类需要修复如下:

class FinalizerPlugin implements Plugin<Project> {
    @Override
    void apply(Project project) { ... }
}

Groovy仅支持双引号字符串的字符串插值:

println "Source Directory : ${project.finalizeArgs.path}"