Какая разница в применении Gradle-плагина


187

Я не понимаю блок плагинов Gradle

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

и другой:

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

В первом блоке у нас есть название плагина. во второй пакет и версия. Я не понимаю, где я должен использовать первый блок, а когда второй.


30
С Gradle, будьте готовы увидеть 2+ способов сделать то же самое!
Пауло Мерсон

7
Gradle - это Perl систем сборки.
Сакра

Ответы:


178

pluginsБлок является новым методом применения плагин, и они должны быть доступны в Gradle хранилища плагин . applyПодход является старшим, но более гибкий метод добавления плагина к вашей сборке.

Новый pluginsметод не работает в многопроектных конфигурациях ( subprojects, allprojects), но будет работать над конфигурацией сборки для каждого дочернего проекта.

Я бы подумал, что по мере развития функциональности pluginsметод конфигурации обгонит старый подход, но на этом этапе оба могут использоваться и используются одновременно.


4
Имейте в виду, что применение плагина с использованием плагинов DSL ( plugins {...}) не работает для ваших личных плагинов или плагинов компании, которые не опубликованы в официальном репозитории плагинов Gradle. Вот почему я надеюсь, что старый подход, по крайней мере, выживет, пока новый не поддержит поиск в частных репозиториях.
Дац

2
pluginsработает в мультипроекте, в соответствии с руководством Gradle (Gradle версия 5.6.2) guides.gradle.org/creating-multi-project-builds/… Он использует pluginsblock apply falseдля добавления плагина в общий проект, но не добавляет это к корневому проекту. Подпроект pluginsснова использует блоки для добавления плагина.
yetsun

Там действительно нет смысла использовать pluginsболее apply plugin.
Сакра

1
2020, и я все еще используюapply plugin
Blundell

Это абсолютно ужасно, две директивы с совершенно разным синтаксисом и входами, в дополнение к которым несовместимы. Gradle - безусловно самая большая боль в шее при использовании Java и Kotlin.
Кристиан

57

Как уже упоминалось @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, например 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"

Это как-то производит неправильное впечатление. Один не может просто преобразовать apply plugin xxxв plugins { id xxx }(я попробовал это , и это не работа)
Christian

Я думаю, что ответ и цитируемая документация ясно говорят об этом. Это зависит от вашего случая. Вы можете предоставить больше информации о вашем деле или опубликовать его в другом вопросе.
Муса
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.