您好,我正在编写Gradle自定义插件。
1)我正在我的插件中创建一个任务,并且我希望在调用任何编译任务时都可以调用该任务。
说用户可以调用compileJava,compileJava等
要么
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 =“编译我的文件”
compileMyFiles.group =“我的文件”
...
最佳答案
我建议您看一下内部插件的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
类型,则需要在循环中将其排除,以避免循环依赖。对于 war 任务,您当前的方法似乎不错。
关于plugins - 在任何编译执行时调用Gradle自定义任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7347098/