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

如何使用新的Gradle插件机制将插件应用于所有项目?,gradle,Gradle,在Gradle2.1之前,我可以通过使用allProjectsclosure(当然是通过预先解析jar)将插件应用于所有项目: 有了新的发布机制,插件闭包似乎无法在所有项目中使用: allprojects { plugins { id "com.jfrog.artifactory" version "3.0.1" } } 在以下情况下失败: “找不到参数[build\u xxxx\u run\u closure1]的方法插件()_closure4@yyyyy]

在Gradle2.1之前,我可以通过使用
allProjects
closure(当然是通过预先解析jar)将插件应用于所有项目:

有了新的发布机制,
插件
闭包似乎无法在
所有项目中使用:

allprojects {

    plugins {
        id "com.jfrog.artifactory" version "3.0.1"
    }
}
在以下情况下失败:

“找不到参数[build\u xxxx\u run\u closure1]的方法插件()_closure4@yyyyy]“关于根项目”


使用
插件的规则是什么?插件是否仅应用于当前项目?如果是这样,我如何将其应用于所有项目而不在每个构建中重复
插件
闭包?

新的
插件{…}
语法不能在
所有项目{…}
子项目{…}
闭包中使用。此外,它只能在构建脚本中使用(没有脚本插件、初始化脚本等)。如果您想避免将插件单独应用于每个项目,我建议使用旧的符号。Gradle团队已经意识到这一问题,并将在未来版本中引入解决方案

更新:从Gradle 3.0开始,您可以通过稍微修改的方式完成此操作。您仍然需要显式地使用
apply()
,但您不再需要处理所有
buildscript{}
无意义的问题,才能在类路径上获得插件。这也允许您有条件地应用插件。有关更多信息,请查看Gradle 3.0

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

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

新的闭包语法是使sonarqube插件工作的唯一方法,由于上述错误,无法使新的插件闭包语法在我的项目中工作。难怪JVM语言因为这些基础设施差而名声不好。注意:-在我的例子中,plugins闭包位于旧apply插件代码之后的所有代码段之外。
plugins {
    id 'my.special.plugin' version '1.0' apply false
}

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