【问题标题】:Defining a task dependency inside gradle plugin在 gradle 插件中定义任务依赖项
【发布时间】:2017-12-28 14:09:16
【问题描述】:

我正在尝试 fix a gradle plugin 检查 TODO 标记。

此插件添加了一个新任务 (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】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-28
    • 1970-01-01
    • 2012-10-23
    • 1970-01-01
    • 2015-07-08
    • 1970-01-01
    相关资源
    最近更新 更多