如何使用新的Gradle插件机制将插件应用于所有项目?

时间:2014-10-07 12:42:58

标签: gradle

在Gradle 2.1之前我可以通过使用allProjects闭包将插件应用于所有项目(当然,通过prepreisly解析jar):

buildscript {
  repositories {
    jcenter()
  }
  dependencies {
    classpath "org.jfrog.buildinfo:build-info-extractor-gradle:3.0.1"
  }
}

allprojects {
    apply plugin: "com.jfrog.artifactory"
}

使用新的发布机制,似乎plugins关闭不能在allprojects内使用:

allprojects {

    plugins {
        id "com.jfrog.artifactory" version "3.0.1"
    }
}

失败了:

"无法在根项目"

上找到参数[build_xxxx_run_closure1_closure4 @ yyyyy]的方法插件()

使用plugins关闭的规则是什么?该插件仅适用于当前项目吗?如果是这样,如何在不重复每个构建中的plugins闭包的情况下将其应用于所有项目?

1 个答案:

答案 0 :(得分:45)

新的plugins {...}语法不能在allprojects {...}subprojects {...}关闭中使用。此外,它只能在构建脚本中使用(没有脚本插件,init脚本等)。如果你想避免必须单独将插件应用于每个项目,我建议使用旧的表示法。这是Gradle团队所了解的问题,将来会在未来的版本中引入解决方案。

更新:从Gradle 3.0开始,您可以稍加修改的方式执行此操作。您仍然必须明确使用apply(),但您不再需要处理所有buildscript { }废话以获取类路径上的插件。这也允许您有条件地应用插件。有关详细信息,请查看Gradle 3.0 release notes

plugins {
    id 'my.special.plugin' version '1.0' apply false
}

allprojects {
    apply plugin: 'java'
    apply plugin: 'my.special.plugin'
}