自定义插件中的默认操作

Default actions in custom plugins

我正在使用 gradle-api 在 Gradle 自定义插件中工作,需要设置一个始终执行的操作,例如配置任务。

我用这种方式创建了一些任务:

class MyTask extends DefaultTask {
    @TaskAction
    void myAction() throws Exception {
        [my action code]
    }
}

然后添加到项目中:

class MyPlugin implements Plugin<Project> {
    @Override
    void apply(Project project) {
        project.getTasks().create("myTask", MyTask.class)
    }
}

...这些有效:当我明确调用 myTask 目标时,它会被执行,但我需要一个每次都执行的任务,即使没有明确调用也是如此。

如果你想在grable为运行时每次都执行代码,你可以直接将你的代码添加到apply方法或者在块afterEvaluate:

class MyPlugin implements Plugin<Project> {
  @Override
  void apply(Project project) {
    project.getTasks().create("myTask", MyTask.class)
    // your code...
    // or
    project.afterEvaluate(proj -> {
      // your code...
    });
  }
}

如果您需要将您的代码专门放在 task 中,那么您应该使您的任务 dependsOn 成为现有任务(该任务已经在 DAG - 有向无环图中注册)。例如:

MyTask task = Tproject.getTasks().create("myTask", MyTask.class);
project.getTasks().findByName("assembleDebug").dependsOn(task);

关于dependsOn你可以在docs and this answer中看到。

已弃用:

此外,在旧版本Gradle中,您可以做到yourTask.execute(),但现在已弃用。

终于找到方法了:

思路是把我的动作配置成一个配置。 我想有几种方法,但我喜欢这个:

class MyPlugin implements Plugin<Project> {
    @Override
    void apply(Project project) {

        final MyTask myTask = project.getTasks().create(
                "myTask", MyTask.class
        )

        project.getConfigurations().create(
                "myTask",
                {
                    myTask.myMethod()
                }
        )
    }
}