我正在尝试按照此处的示例创建自定义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"
}
总之,我不明白错误。我可以说,一切都与教程相符。我试图简单地将一个字符串参数传递给插件的任务。
答案 0 :(得分:-1)
插件类需要修复如下:
class FinalizerPlugin implements Plugin<Project> {
@Override
void apply(Project project) { ... }
}
Groovy仅支持双引号字符串的字符串插值:
println "Source Directory : ${project.finalizeArgs.path}"