我正在用Java编写自定义Gradle插件,当我显式调用它创建的任务时,它似乎可以按预期工作。
现在,任务与测试高度相关,因此我希望它在执行测试时自动执行(理想情况下,实际上在测试之前),但是我遇到了2个问题。以下是我的插件:
forEach()
我在本地构建和部署此插件。当我在多模块项目根目录的build.gradle中声明和配置它时:
如果我忘记在项目中应用Java插件,则“ test”任务不存在,并且myCustomTask不能“附加”到该对象:有没有办法确保Java插件是MyCustomGradlePlugin执行时声明?
“ myCustomTask”执行,但仅在项目的根本没有什么有趣的地方执行:如果该项目是多模块项目,则需要它对所有模块执行。理想情况下,我希望插件可以处理它,以最大程度地简化将使用它的项目中的配置。我该如何实现?
答案 0 :(得分:1)
有没有一种方法可以确保在MyCustomGradlePlugin执行时声明了Java插件?
是的。您可以像这样在自己的插件中应用Java
插件:
project.getPlugins().apply(JavaPlugin.class)
或者,如果Java
插件存在,则您可以有条件地添加任务,如下所示:
project.getPlugins().withType(JavaPlugin.class) {
MyCustomGradleConfig myCustomGradleConfig = ...
}
如果该项目是一个多模块项目,我需要它对所有模块执行。
您可以通过简单地将插件应用于每个子项目来实现这一目标,例如通过allprojects
方法:
allprojects {
apply plugin: "your.plugin.id"
myCustomGradleExtension {
// ...
}
}
或者,您也可以将所有插件代码包装在allprojects
块中。在这种情况下,从用户的角度来看,他们将您自己的插件应用于根目录,它将为所有子项目进行配置。