应用gradle插件有什么区别


185

我不明白gradle插件块

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

另一个:

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

在第一步中,我们有一些插件名称。在第二个软件包和版本中。我不知道我应该在哪里使用第一块,什么时候第二块。


30
使用Gradle,准备好看2种以上的方法来做同样的事情!
Paulo Merson

7
Gradle是构建系统的Perl。
萨克拉

Answers:


176

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

新的plugins方法并不多项目配置(工作subprojectsallprojects),但对于每个子项目生成配置将起作用。

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


4
请记住,使用插件DSL(plugins {...})应用插件不适用于未发布到正式Gradle插件存储库中的私有插件或公司插件。这就是为什么我希望旧方法至少能够继续存在,直到新方法支持在私有存储库中进行搜索为止。
戴茨,

2
plugins根据Gradle教程(Gradle版本5.6.2)guides.gradle.org/creating-multi-project-builds/…,它可在多项目中使用。它使用pluginsblock with apply false将插件添加到整个项目中,但不添加它到根项目。子项目plugins再次使用块来添加插件。
yetsun '19

使用pluginsover 真的没有意义apply plugin
萨克拉

1
2020年,我仍在使用apply plugin
Blundell

这是绝对可怕的,两个指令的语法和输入完全不同,而且它们之间是不兼容的。使用Java和Kotlin时,Gradle是迄今为止最大的颈部疼痛。
基督教

57

如@cjstehno所述,这apply plugin是您应避免使用的旧方法。

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

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

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

在要在plugins块中应用已添加但未应用的插件的情况下,仍然可以使用legacy方法。例如,在主项目xyz中,添加了插件但未应用,而应仅在子项目中应用subPro

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

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

请注意,您不再需要该版本。该版本是必需的plugins块,除非你正在使用的核心摇篮插件之一,例如javascala,...

在尝试创建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"

这在某种程度上给人以错误的印象。一个人不能简单地转换apply plugin xxxplugins { id xxx }(我尝试过但没有用)
基督教徒

我认为答案和引用的文档清楚地说明了这一点。这取决于您的情况。您可以提供有关您案件的更多信息,也可以在其他问题中发布此信息。
穆萨
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.