304

我不明白 gradle 插件块

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

和另一个:

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

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

4

3 回答 3

270

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

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

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

于 2015-09-02T12:31:20.720 回答
82

正如@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'
    }
}

请注意,您不再需要该版本。除非您使用核心 Gradle 插件之一,否则该版本是plugins块中必需的,例如java, scala, ...

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

目前应该使用什么:

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"
于 2018-05-03T11:10:31.547 回答
7

Now ( In Gradle 6) you can give repositories name for plugins without using build script. In settings.gradle, we can add plugin pluginManagement

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

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

于 2020-08-28T03:19:31.383 回答