在gradle插件中定义任务依赖项

时间:2017-12-28 14:09:17

标签: gradle groovy gradle-plugin

我正在尝试检查TODO标签的fix a gradle plugin

此插件添加了一个新任务(checkTodo),可用于运行检查。此任务未自动运行,但可以通过将此行添加到build.gradle来完成此操作: check.dependsOn checkTodo

我希望在每个使用此插件的build.gradle中删除对此行的需要,方法是在插件本身中声明此依赖项。这可能吗?

我尝试过的事情:

static void applyTasks(final Project project) {
    TodoTask task = project.tasks.create("checkTodo", TodoTask)

    project.task('check').dependsOn(task)
    project.tasks().task('check').dependsOn(task)
    project.tasks().check
    project.getAllTasks(true).get('check').dependsOn(task)
    project.getDefaultTasks().get('check').dependsOn(task)
}

project.task('check').dependsOn(task)给出:

  

无法应用插件[class'org.gradle.language.base.plugins.LifecycleBasePlugin']

     

不允许在使用标准Gradle生命周期插件时声明自定义“检查”任务。

project.getAllTasks(true).get(project)的集合不包含“检查”任务,其他人只是给出“找不到方法”错误。

1 个答案:

答案 0 :(得分:0)

问题是,在您应用插件时,特定(或任何)check任务可能不存在。

要确保创建所有任务(甚至通过build.gradle中的用户代码),请使用afterEvaluate闭包。请注意,如果在整个构建中不会创建名为check的任务,则此方法仍会失败。

project.afterEvaluate {
    project.tasks['check'].dependsOn task
}

如果您想依赖于特定插件的任务创建(例如Java插件),请使用项目插件管理器的withIdwithPlugin方法。如果应用特定插件,将执行给定的闭包。

project.pluginManager.withPlugin('java') {
    project.tasks['check'].dependsOn task
}