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

标签 plugins gradle

您好,我正在编写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/

相关文章:

python - 如何配置 Jenkins ShiningPanda 插件 Python 安装

.net - 如何使用 Sandbox 在 .NET 中创建插件模型?

gradle - 如何在 gradle 中创建自定义任务以将 java 和 kotlin 代码打包到 jar 中?

java - 从 Maven for Artifactory 本地下载 Artifact

android - Cordova 插件 - Javascript 从 native 代码接收消息

plugins - 使用文件管理器的新插件模块中的 Moodle 开发错误

python - 最小 DOM - 在根节点上设置一个属性

maven - pom依赖关系在Gradle中失败(在Maven中可以)

gradle - 引用静态库目录 gradle 时构建期间的问题

android - 在gradle中执行shell脚本看不到echo输出