Учебники

Gradle — Плагины

Плагин — это не что иное, как набор задач, почти все полезные задачи, такие как компиляция задач, настройка объектов домена, настройка исходных файлов и т. Д., Выполняются плагинами. Применение плагина к проекту означает, что он позволяет расширять возможности проекта. Плагины могут делать такие вещи, как —

  • Расширьте базовую модель Gradle (например, добавьте новые элементы DSL, которые можно настроить).
  • Настройте проект в соответствии с преобразованиями (например, добавьте новые задачи или настройте разумные значения по умолчанию).
  • Применить конкретную конфигурацию (например, добавить организационные репозитории или обеспечить соблюдение стандартов).

Типы плагинов

В Gradle есть два типа плагинов: плагины для скриптов и бинарные плагины. Плагины скриптов — это дополнительный скрипт сборки, который дает декларативный подход к манипулированию сборкой. Обычно это используется в сборке. Бинарные плагины — это классы, которые реализуют интерфейс плагина и применяют программный подход к управлению сборкой. Бинарные плагины могут находиться со скриптом сборки, с иерархией проекта или внешне в JAR плагина.

Применение плагинов

Метод API Project.apply () используется для применения определенного плагина. Вы можете использовать один и тот же плагин несколько раз. Существует два типа плагинов: один — плагин скрипта, а второй — бинарный плагин.

Скриптовые плагины

Плагины сценариев могут быть применены из сценария в локальной файловой системе или в удаленном месте. Расположение файловой системы относится к каталогу проекта, в то время как расположение удаленного сценария указывает URL-адрес HTTP. Взгляните на следующий фрагмент кода. Он используется для применения плагина other.gradle к сценарию сборки. Используйте этот код в файле build.gradle .

apply from: 'other.gradle'

Бинарные плагины

Каждый плагин идентифицируется по идентификатору плагина, так как некоторые основные плагины используют короткие имена для его применения, а некоторые плагины сообщества используют полное имя для идентификатора плагина. Некоторое время это позволяет указать класс плагина.

Взгляните на следующий фрагмент кода. Он показывает, как применить плагин Java, используя его тип. Используйте этот код в файле build.gradle .

apply plugin: JavaPlugin

Посмотрите на следующий код для применения основного плагина, используя короткое имя. Используйте этот код в файле build.gradle .

plugins {
   id 'java'
}

Взгляните на следующий код для применения плагина сообщества с использованием короткого имени. Используйте этот код в файле build.gradle .

plugins {
   id "com.jfrog.bintray" version "0.4.1"
}

Написание пользовательских плагинов

При создании пользовательского плагина вам необходимо написать реализацию плагина. Gradle создает плагин и вызывает экземпляр плагина с помощью метода Plugin.apply (). Следующий пример содержит плагин приветствия, который добавляет задачу приветствия в проект. Посмотрите на следующий код. Используйте этот код в файле build.gradle .

apply plugin: GreetingPlugin

class GreetingPlugin implements Plugin<Project> {
   void apply(Project project) {
      project.task('hello') << {
         println "Hello from the GreetingPlugin"
      }
   }
}

Используйте следующий код для выполнения вышеуказанного сценария.

C:\> gradle -q hello

Выход:

Hello from the GreetingPlugin

Получение информации от сборки

Большинству плагинов требуется поддержка конфигурации из скрипта сборки. У проекта Gradle есть связанный объект ExtensionContainer, который помогает отслеживать все настройки и свойства, передаваемые плагинам.

Давайте добавим простой объект расширения в проект. Здесь мы добавляем объект расширения приветствия в проект, который позволяет настроить приветствие. Используйте этот код в файле build.gradle .

apply plugin: GreetingPlugin

greeting.message = 'Hi from Gradle'

class GreetingPlugin implements Plugin<Project> {
   void apply(Project project) {
      // Add the 'greeting' extension object
      project.extensions.create("greeting", GreetingPluginExtension)
		
      // Add a task that uses the configuration
      project.task('hello') << {
         println project.greeting.message
      }
   }
}

class GreetingPluginExtension {
   def String message = 'Hello from GreetingPlugin'
}

Используйте следующий код для выполнения вышеуказанного сценария.

C:\> gradle -q hello

Выход:

Hi from Gradle

В этом примере GreetingPlugin — это простой старый объект Groovy с полем с именем message. Объект расширения добавляется в список плагинов с именем приветствия. Затем этот объект становится доступным как свойство проекта с тем же именем, что и у объекта расширения.

Gradle добавляет закрытие конфигурации для каждого объекта расширения, поэтому вы можете сгруппировать настройки вместе. Посмотрите на следующий код. Используйте этот код в файле build.gradle .

apply plugin: GreetingPlugin

greeting {
   message = 'Hi'
   greeter = 'Gradle'
}

class GreetingPlugin implements Plugin<Project> {
   void apply(Project project) {
      project.extensions.create("greeting", GreetingPluginExtension)
		
      project.task('hello') << {
         println "${project.greeting.message} from ${project.greeting.greeter}"
      }
   }
}

class GreetingPluginExtension {
   String message
   String greeter
}

Используйте следующий код для выполнения вышеуказанного сценария.

C:\> gradle -q hello

Выход:

Hello from Gradle

Стандартные плагины Gradle

Существуют различные плагины, которые включены в дистрибутив Gradle.

Языковые плагины

Эти плагины добавляют поддержку различных языков, которые могут быть скомпилированы и выполнены в JVM.

Идентификатор плагина Автоматически применяется Описание
Джава Java-база Добавляет в проект возможности компиляции, тестирования и связывания Java. Он служит основой для многих других плагинов Gradle.
заводной Java, заводная база Добавлена ​​поддержка построения Groovy проектов.
Скала Java, Scala-база Добавлена ​​поддержка для построения проектов Scala.
ANTLR Джава Добавлена ​​поддержка генерации парсеров с использованием Antlr.

Инкубация языковых плагинов

Эти плагины добавляют поддержку различных языков.