为项目的所有模块自动从自定义 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 中声明和配置它时:
如果我忘记在项目中应用 java 插件,那么 'test' 任务不存在并且 myCustomTask 不能 "attached" : 是有没有办法确保在执行 MyCustomGradlePlugin 时声明 java 插件?
'myCustomTask' 执行,但仅在项目的根目录执行,那里没有什么有趣的:如果项目是多模块项目,我需要它为所有模块执行。理想情况下,我希望插件会处理它,以最大限度地简化将使用它的项目中的配置。我该如何实现?
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
块中。在那种情况下,从用户的角度来看,他们将您自己的插件应用到根目录,它将为所有子项目自行配置。
我正在 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 中声明和配置它时:
如果我忘记在项目中应用 java 插件,那么 'test' 任务不存在并且 myCustomTask 不能 "attached" : 是有没有办法确保在执行 MyCustomGradlePlugin 时声明 java 插件?
'myCustomTask' 执行,但仅在项目的根目录执行,那里没有什么有趣的:如果项目是多模块项目,我需要它为所有模块执行。理想情况下,我希望插件会处理它,以最大限度地简化将使用它的项目中的配置。我该如何实现?
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
块中。在那种情况下,从用户的角度来看,他们将您自己的插件应用到根目录,它将为所有子项目自行配置。