【问题标题】:What the difference in applying gradle plugin应用 gradle 插件有什么区别
【发布时间】:2015-11-27 22:36:09
【问题描述】:

我不懂 gradle 插件块

apply plugin: 'someplugin1'
apply plugin: 'maven'

还有一个:

plugins {
   id 'org.hidetake.ssh' version '1.1.2'
}

在第一个块中我们有一些插件名称。在第二个包和版本中。我不明白我应该在哪里使用第一个块以及何时使用第二个。

【问题讨论】:

  • 使用 Gradle,准备好看到 2+ 种方法来做同样的事情!
  • Gradle 是构建系统的 Perl。
  • 请注意,在plugins {} 的第二种情况下,您不使用包,而是使用完全限定的插件ID。查看 Gradle 文档中的详细信息 docs.gradle.org/current/userguide/…

标签: groovy gradle gradle-plugin


【解决方案1】:

plugins 块是应用插件的较新方法,它们必须在Gradle plugin repository 中可用。 apply 方法是向您的构建添加插件的较旧但更灵活的方法。

新的plugins 方法不适用于多项目配置(subprojectsallprojects),但适用于每个子项目的构建配置。

我认为随着功能的发展,plugins 配置方法将取代旧方法,但此时两者可以同时使用。

【讨论】:

  • 请记住,使用插件 DSL (plugins {...}) 应用插件不适用于未发布到官方 Gradle 插件仓库的私人插件或公司插件。这就是为什么我希望旧方法至少能继续存在,直到新方法支持在私有存储库中搜索。
  • 2020 我还在用apply plugin
  • 这绝对是可怕的,两个具有完全不同的语法和输入的指令,最重要的是不兼容。 Gradle 是迄今为止使用 Java 和 Kotlin 时最头疼的问题。
  • @Datz 从 Gradle 6 开始,您可以通过在 settings.gradle 的 pluginManagement 块中定义存储库来使用自己的自定义插件(甚至禁用官方 Gradle 插件仓库)。
  • 2021 我还在用apply插件
【解决方案2】:

正如@cjstehno 已经提到的,apply plugin 是您应该避免的遗留方法。

随着插件 DSL 的引入,用户应该没有理由使用传统的插件应用方法。如果构建作者由于当前工作方式的限制而无法使用插件 DSL,则会在此处记录。

使用新的plugins block 方法,您可以添加插件并使用可选参数apply 控制何时应用它:

plugins {
    id «plugin id» version «plugin version» [apply «false»]
}

如果您想在plugins 块中应用已添加但未应用的插件,您仍将使用旧方法。例如,在主项目中添加了一个插件xyz,但没有应用,它应该只应用于子项目subPro

plugins {
  id "xyz" version "1.0.0" apply false
}

subprojects { subproject ->
    if (subproject.name == "subPro") {
        apply plugin: 'xyz'
    }
}

请注意,您不再需要该版本。 plugins 块中需要版本,除非您使用核心 Gradle 插件之一,例如 javascala、...

我在尝试创建Spring Boot 应用程序时花了一些时间来了解其中的区别,这就是为什么我会在一段时间后再次回答这个问题。以下使用Spring Boot plugin 的示例对我帮助很大:

目前应该使用什么:

plugins {
  id "org.springframework.boot" version "2.0.1.RELEASE"
}

Gradle 2.1 之前使用了什么:

buildscript {
  repositories {
    maven {
      url "https://plugins.gradle.org/m2/"
    }
  }
  dependencies {
    classpath "org.springframework.boot:spring-boot-gradle-plugin:2.0.1.RELEASE"
  }
}

apply plugin: "org.springframework.boot"

【讨论】:

  • 这在某种程度上给人以错误的印象。不能简单地将apply plugin xxx 转换为plugins { id xxx }(我试过了,没用)
  • 我认为答案和引用的文档清楚地说明了这一点。这取决于你的情况。您可以提供有关您的案例的更多信息或在其他问题中发布。
【解决方案3】:

现在(在 Gradle 6 中)您可以在不使用构建脚本的情况下为插件指定存储库名称。 在settings.gradle中,我们可以添加插件pluginManagement

pluginManagement {
    repositories {
        maven {
            url '../maven-repo'
        }
        gradlePluginPortal()
        ivy {
            url '../ivy-repo'
        }
    }
}

参考:https://docs.gradle.org/current/userguide/plugins.html#sec:custom_plugin_repositories

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-15
    • 1970-01-01
    • 2016-09-17
    相关资源
    最近更新 更多