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

wjt*_*jtk 6 gradle

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

gradle 中是否有任何方法可以强制执行插件应用顺序?还是有其他解决办法?

我们插件的一小段摘录:

void apply(Project project) {
        if (project.plugins.hasPlugin(ApplicationPlugin) {
             //some stuff, doesn't work if "application" appears after this plugin
        }
}
Run Code Online (Sandbox Code Playgroud)

小智 7

根据Gradle 论坛上的这个帖子withType(Class)并被withId(String)懒惰地评估,并且仅在应用引用的插件时应用。

void apply(Project project) {
    project.plugins.withType(ApplicationPlugin) {
        //some stuff, doesn't work if "application" appears after this plugin
    }
}
Run Code Online (Sandbox Code Playgroud)


Ati*_*gur -1

为什么不使用插件依赖项。您的自定义 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);
}
Run Code Online (Sandbox Code Playgroud)