【问题标题】:How do I add plugins to subprojects based on what plugins are present?如何根据存在的插件向子项目添加插件?
【发布时间】:2023-03-03 06:29:22
【问题描述】:

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

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

subprojects {
  if (getPluginManager().hasPlugin("java")) {
    apply(plugin: "findbugs")
  }
}

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

【问题讨论】:

    标签: gradle groovy


    【解决方案1】:

    您需要使用PluginContainer.withId() 来执行此操作。如果给定的插件已经被应用,或者将来/如果该插件被应用,这将立即评估给定的闭包。

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

    【讨论】:

    • 这对我不起作用。我在子项目中的 build.gradle 应用了 java 插件,而我的根项目 build.gradle 中有你的代码。 withId 的文档说“为具有给定 id 的插件执行操作”。它接受的类型是 Action super Plugin> 似乎对“插件”应用动作。
    • discuss.gradle.org/t/… 似乎也相关,但对我来说会导致疯狂的错误。
    猜你喜欢
    • 1970-01-01
    • 2018-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-16
    • 1970-01-01
    相关资源
    最近更新 更多