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

问题描述 投票:0回答:1

我正在尝试检查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)的集合不包含“检查”任务,其他人只是给出“找不到方法”错误。

gradle groovy gradle-plugin
1个回答
0
投票

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

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

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

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

project.pluginManager.withPlugin('java') {
    project.tasks['check'].dependsOn task
}
© www.soinside.com 2019 - 2024. All rights reserved.