我试图按照以下示例创建自定义gradle插件:http://www.javacodegeeks.com/2012/08/gradle-custom-plugin.html。只要我不尝试为任务提供参数,一切都会正常,但是,当我尝试添加参数时,出现以下错误:
Error:(26, 0) Task of type 'com.jwoolston.finalizer.gradle.FinalizerTask_Decorated' has been instantiated directly which is not supported. Tasks can only be created using the DSL.
我已经用谷歌搜索过,但似乎没有得到与我的情况有关的任何结果(至少不是我所了解的结果)。
插件的简短ID在生成的jar list 中声明为:
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"
}
简而言之,我不明白该错误。据我所知,一切都与本教程相符。我试图简单地将字符串参数传递给插件的任务。
最佳答案
插件类需要固定如下:
class FinalizerPlugin implements Plugin<Project> {
@Override
void apply(Project project) { ... }
}
Groovy仅支持对双引号字符串进行字符串插值:
println "Source Directory : ${project.finalizeArgs.path}"
关于plugins - Gradle插件开发错误传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27307578/