自定义插件中的默认操作

时间:2018-10-26 15:36:55

标签: gradle gradle-plugin

我正在使用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目标时,它会执行,但是我需要每次都执行的任务,即使没有明确调用也是如此。

2 个答案:

答案 0 :(得分:0)

如果要在每次运行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,您可以在docsthis answer中看到。

已弃用:

此外,在旧版本的Gradle中,您可以执行yourTask.execute(),但现在不推荐使用。

答案 1 :(得分:0)

最后我找到了方法:

该想法是将我的操作配置为配置。 我想有几种方法,但是我喜欢这种方法:

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()
                }
        )
    }
}