Gradle 如何根据存在的插件向子项目添加插件?

Gradle 如何根据存在的插件向子项目添加插件?,gradle,groovy,Gradle,Groovy,一些子项目有自己的build.gradle文件应用的java插件。在根项目的build.gradle中,我想将pluginfindbugs应用于已经有java插件的每个子项目。在build.gradle中,我尝试过: configure(subprojects.findAll {proj -> proj.getPluginManager().hasPlugin("java")}) { apply(plugin: "findbugs") } 及 外部循环确实为每个子项目运行一次

一些子项目有自己的build.gradle文件应用的java插件。在根项目的build.gradle中,我想将pluginfindbugs应用于已经有java插件的每个子项目。在build.gradle中,我尝试过:

configure(subprojects.findAll {proj -> proj.getPluginManager().hasPlugin("java")}) {
      apply(plugin: "findbugs")
}

外部循环确实为每个子项目运行一次,但内部闭包在这两种情况下都不会运行。 我怀疑这是因为子项目构建脚本在外部脚本之前生效。除了手动将findbugs插件应用于每个子项目之外,还有什么方法可以解决这个问题吗?

您需要使用它来完成此操作。如果给定的插件已经应用,或者将来应用插件时,这将立即评估给定的闭包

subprojects {
    plugins.withId('java') {
        apply plugin: 'findbugs'
    }
}

这对我不起作用。子项目中的My build.gradle应用java插件,并且我的根项目build.gradle中包含您的代码。withId的文档中说“为具有给定id的插件执行操作”。它接受的类型是Action似乎也有关联,但对我来说会导致疯狂的错误。
subprojects {
    plugins.withId('java') {
        apply plugin: 'findbugs'
    }
}