为项目的所有模块自动从自定义 java 插件触发 Gradle 任务

Trigger a Gradle task from a custom java plugin automatically for all modules of the project

我正在 Java 中编写一个自定义 Gradle 插件,当我显式调用它创建的任务时,它似乎可以正常工作。

现在,该任务与测试高度相关,所以我希望它在执行测试时自动执行(理想情况下,实际测试之前),但我有 2 个问题。下面是我的插件:

public class MyCustomGradlePlugin implements Plugin<Project> {

    public void apply(Project project) {
        MyCustomGradleConfig myCustomGradleConfig = project.getExtensions().create("myCustomGradleExtension", MyCustomGradleConfig.class, project);

        Task myCustomTask=project.getTasks().create("checkRules", MyCustomRulesTask.class, myCustomGradleConfig);

        archUnitTask.setGroup("verification");
        project.getTasks().findByName("test").dependsOn(myCustomTask);
    }
}

我在本地构建并部署了这个插件。当我在多模块项目的根目录 build.gradle 中声明和配置它时:

is there a way to make sure the java plugin is declared when MyCustomGradlePlugin executes ?

是的。您可以像这样在自己的插件中应用 Java 插件:

project.getPlugins().apply(JavaPlugin.class)

或者,如果 Java 插件存在,您可以有条件地添加您的任务,如下所示:

project.getPlugins().withType(JavaPlugin.class) {
    MyCustomGradleConfig myCustomGradleConfig = ...
}

if theproject is amulti-module project, I need it to execute for all the modules.

您可以通过简单地将您的插件应用到每个单独的子项目来实现这一点,例如通过 allprojects 方法:

allprojects {
    apply plugin: "your.plugin.id"
    myCustomGradleExtension {
        // ...
    }
}

或者,您也可以将所有插件代码包装在一个 allprojects 块中。在那种情况下,从用户的角度来看,他们将您自己的插件应用到根目录,它将为所有子项目自行配置。