在自定义TaskActions中使用gradle任务DSL?

时间:2011-12-12 19:49:32

标签: plugins groovy gradle

class MyTask扩展DefaultTask {     String property =“default”

@TaskAction
def grailsAppClean() {
    delete fileTree {
      ...
    }
    exec {
      ...
    }
}

在我的插件中,我有这个:

void apply(Project project) {
    project.task('myTask', type: MyTask)
}

当我直接从外部gradle脚本调用任务或使用type: MyTask时,我收到以下错误:

Could not find method fileTree()...

我可以通过DSL以这种方式使用内置任务吗?如果没有,我该如何手动调用FileTreeExec?我希望能够使用DSL。

1 个答案:

答案 0 :(得分:3)

首先,您可以编写脚本插件而不是二进制插件。如果您想坚持使用二进制插件,可以使用以下命令获取DSL语法:

void apply(Project project) {
    project.configure(project) {
        delete fileTree {
            ...
        }
        exec {
            ...
        }
    }
}

有一些语法位是你无法获得的,因为它们是用Grooyy AST变换实现的。想到的是task foo(...)语法。此外,您必须在每种方法中重复project.configure(project)。你可以把它抽象成一个帮助方法。