在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
闭包的情况下将其应用于所有项目?
答案 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'
}