如何强制gradle插件应用顺序?
在我们公司,我们编写了定制的gradle插件,当应用程序插件出现时,它正在做一些事情。但当应用程序插件包含在我们的插件之后的build.gradle中时,我们的插件不会发现应用程序插件,并且不会执行操作 gradle有没有办法强制执行插件应用顺序?还是其他解决方案 我们插件的小摘录:如何强制gradle插件应用顺序?,gradle,Gradle,在我们公司,我们编写了定制的gradle插件,当应用程序插件出现时,它正在做一些事情。但当应用程序插件包含在我们的插件之后的build.gradle中时,我们的插件不会发现应用程序插件,并且不会执行操作 gradle有没有办法强制执行插件应用顺序?还是其他解决方案 我们插件的小摘录: void apply(Project project) { if (project.plugins.hasPlugin(ApplicationPlugin) { //som
void apply(Project project) {
if (project.plugins.hasPlugin(ApplicationPlugin) {
//some stuff, doesn't work if "application" appears after this plugin
}
}
为什么不使用插件依赖项呢。您的自定义gradle插件应该依赖于ApplicationPlugin 请参阅GroovyPlugin中的以下代码,它依赖于JavaPlugin
public void apply(Project project) {
project.getPlugins().apply(GroovyBasePlugin.class);
project.getPlugins().apply(JavaPlugin.class);
project.getConfigurations().getByName(COMPILE_CONFIGURATION_NAME).extendsFrom(
project.getConfigurations().getByName(GroovyBasePlugin.GROOVY_CONFIGURATION_NAME)
);
configureGroovydoc(project);
}
据我所知,经过一些调查,唯一的解决办法是保持应用插件的顺序 根据,
withType(Class)
和withId(String)
被延迟评估,并且仅在应用引用的插件时应用
void apply(Project project) {
project.plugins.withType(ApplicationPlugin) {
//some stuff, doesn't work if "application" appears after this plugin
}
}
当应用程序不存在时,我们的插件不应该做“一些事情”,因此不应该依赖它。因此,添加一个条件来检查
应用程序插件是否已应用。正如您在代码示例中所看到的,已经有了该检查。问题是应用插件时,project.plugins中不存在应用插件。