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

Plugins 在任何编译执行时调用Gradle自定义任务,plugins,gradle,Plugins,Gradle,嗨,我正在写一个Gradle自定义插件 1) 我正在插件中创建一个任务,我希望在调用任何编译任务时调用该任务 说用户可以调用compileJava、compileJava等 或 2) 当用户调用gradle war任务时,我可以调用吗。而不是gradle WarmyFile 我想在这些编译任务中调用我的插件tak 我通常像这样将任务设置到我的插件中 。。。 CompileMyFilesTask compileMyFiles=project.tasks.add(COMPILE_MYFILES_TA

嗨,我正在写一个Gradle自定义插件

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

说用户可以调用compileJava、compileJava等

或 2) 当用户调用gradle war任务时,我可以调用吗。而不是gradle WarmyFile

我想在这些编译任务中调用我的插件tak

我通常像这样将任务设置到我的插件中

。。。 CompileMyFilesTask compileMyFiles=project.tasks.add(COMPILE_MYFILES_TASK_NAME,CompileMyFilesTask.class) compileMyFiles.dependsOn(WarPlugin.WAR\u TASK\u NAME)//或JavaPlugin.COMPILE\u。。。 compileMyFiles.description=“编译我的文件” compileMyFiles.group=“MyFiles”

我建议您看看内部插件的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);
  }
});
import org.gradle.api.Task;
导入org.gradle.api.tasks.compile.AbstractCompile;
...
最终任务yourCustomTask=。。。
project.getTasks().withType(AbstractCompile.class,new Action()){
@凌驾
public void execute(任务编译任务){
compileTask.dependsOn(您的客户任务);
}
});
注意:如果自定义任务也是
AbstractCompile
类型,则需要在循环中排除它,以避免循环依赖


对于war任务,您当前的方法似乎很好。

如果您能告诉我们插件的目标是什么,可能会有所帮助—它将做什么?您希望您的任务包装现有的任务,或者它应该是所有任务的依赖项?实际上它编译一些文件。作为JVM语言支持用户,其构建可能应用了java、scala或groovy,也可能没有。所以我不想说JavaPlugin\u编译器。。。仅在添加java时限制我的插件工作。用户可能只使用Scala,所以我觉得如果不添加java,只添加Scala或groovy,我的插件可能无法工作。之后,一旦完成,我还需要将其添加到war中。您没有给我们提供足够的信息-“编译一些文件”,哪种语言?使用传统的循环是不安全的,因为它不会接受插件应用后添加的任务。相反,您必须使用
project.tasks.withType(AbstractCompile){…}
。还有一个Java版本的
with type
,它接受
操作
,而不是
结束
。我修改了我的答案以反映您的观点。实际上还没有尝试编译它,但应该是正确的。