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

标签 plugins groovy gradle

类 MyTask 扩展了 DefaultTask { 字符串属性=“默认”

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

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

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

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

找不到方法 fileTree()...

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

最佳答案

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

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

有一些语法位您无法获取,因为它们是通过 Grooyy AST 转换实现的。我想到的是 task foo(...) 语法。此外,您还必须在每个方法中重复 project.configure(project) 。不过,您可以将其抽象为辅助方法。

关于plugins - 在自定义 TaskActions 中使用 gradle 任务 DSL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8479990/

相关文章:

java - 错误 :Unexpected type tag 13996 found. 或为方法数超过 64K 的应用启用 Multidex

c# - 是否可以使用浏览器插件绕过 IE 中的 'open save save as' 对话框?

javascript - 如何实现第三方Javascript库?

grails - 我尝试使用 grails 和 groovy 根据标准从 postgreySQL 获取数据,但是在访问列表外键 ID 时我遇到了问题

gradle - 使用TeaVM编译时发生IllegalArgumentException

android - 缺少获取 android.compileSdkVersion !错误梯度构建

javascript - Firefox 插件之间的消息

python - 如何在 yapsy 插件中定义类别?

model-view-controller - 在域内容更改时更新Grails VIEW

types - 如何使用 JSoup 从网页获取资源类型?