在任何编译执行时调用Gradle自定义任务

时间:2011-09-08 11:09:10

标签: plugins gradle

您正在撰写Gradle自定义插件。

1)我在我的插件中创建了一个Task,我希望在调用任何编译任务时调用该任务。

说用户可以调用compileJava,compileJava等

OR 2)当用户调用gradle war任务时我可以调用吗?而不是gradle warMyFiles

我想在任何这些编译任务上调用我的插件

我通常会将任务设置为我的插件

... CompileMyFilesTask compileMyFiles = project.tasks.add(COMPILE_MYFILES_TASK_NAME,CompileMyFilesTask.class)         compileMyFiles.dependsOn(WarPlugin.WAR_TASK_NAME)//或JavaPlugin.COMPILE _...         compileMyFiles.description =“编译MyFiles”         compileMyFiles.group =“MyFiles” ...

1 个答案:

答案 0 :(得分:0)

我建议您查看内部插件的gradle源代码,例如Java插件(可以在GRADLE_HOME/src/org/gradle/api/plugins/JavaBasePlugin.java找到)

这是从那里借来的想法。此代码使项目中的所有编译任务都取决于您的自定义任务:

import org.gradle.api.Task;
import org.gradle.api.tasks.compile.AbstractCompile;

...

final Task yourCustomTask = ...

project.getTasks().withType(AbstractCompile.class, new Action<Task>(){
  @Override
  public void execute(Task compileTask){
    compileTask.dependsOn(yourCustomeTask);
  }
});

注意:如果您的自定义任务也是AbstractCompile类型,则您需要在循环中将其排除以避免循环依赖。

对于战争任务,你目前的做法似乎很好。

相关问题