Использование DSL Gradle Task в пользовательских TaskActions? - PullRequest
2 голосов
/ 12 декабря 2011

class MyTask extends 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?Если нет, то как я могу вручную вызвать FileTree и Exec?Я бы хотел использовать DSL.

1 Ответ

3 голосов
/ 13 декабря 2011

Прежде всего, вы можете написать плагин скрипта, а не бинарный плагин. Если вы хотите придерживаться бинарного плагина, вы можете получить синтаксис DSL с помощью:

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

Есть несколько синтаксических битов, которые вы не можете получить, потому что они реализованы с помощью преобразования Grooyy AST. На ум приходит синтаксис task foo(...). Также вы должны повторить project.configure(project) в каждом методе. Вы можете абстрагировать его во вспомогательный метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...