Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何强制gradle插件应用顺序?_Gradle - Fatal编程技术网

如何强制gradle插件应用顺序?

如何强制gradle插件应用顺序?,gradle,Gradle,在我们公司,我们编写了定制的gradle插件,当应用程序插件出现时,它正在做一些事情。但当应用程序插件包含在我们的插件之后的build.gradle中时,我们的插件不会发现应用程序插件,并且不会执行操作 gradle有没有办法强制执行插件应用顺序?还是其他解决方案 我们插件的小摘录: void apply(Project project) { if (project.plugins.hasPlugin(ApplicationPlugin) { //som

在我们公司,我们编写了定制的gradle插件,当应用程序插件出现时,它正在做一些事情。但当应用程序插件包含在我们的插件之后的build.gradle中时,我们的插件不会发现应用程序插件,并且不会执行操作

gradle有没有办法强制执行插件应用顺序?还是其他解决方案

我们插件的小摘录:

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中不存在应用插件。