【问题标题】:How to apply plugin to allprojects with new Gradle plugins mechanism?如何使用新的 Gradle 插件机制将插件应用于所有项目?
【发布时间】:2014-10-07 12:42:57
【问题描述】:

在 Gradle 2.1 之前,我可以使用 allProjects 闭包将插件应用于所有项目(当然,通过预先解析 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闭包的使用规则是什么?该插件是否仅适用于当前项目?如果是这样,我怎样才能将它应用到所有项目而不在每个构建中重复 plugins 闭包?

【问题讨论】:

    标签: gradle


    【解决方案1】:

    新的plugins {...} 语法不能在allprojects {...}subprojects {...} 闭包中使用。此外,它只能在构建脚本中使用(没有脚本插件、初始化脚本等)。如果您想避免将插件单独应用于每个项目,我建议使用旧符号。这是 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'
    }
    

    【讨论】:

    • 新的闭包语法是使 sonarqube 插件工作的唯一方法,并且由于上述错误,不能使新的插件闭包语法为我的项目工作。难怪 JVM 语言因为这些基本东西的基础设施差而名声不好。注意:- 就我而言,插件闭包在旧应用插件代码之后的所有 sn-ps 之外。
    猜你喜欢
    • 1970-01-01
    • 2015-11-25
    • 2015-05-28
    • 1970-01-01
    • 1970-01-01
    • 2018-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多