Gradle - wtyczki

Wtyczka to nic innego jak zestaw zadań, prawie wszystkie przydatne zadania, takie jak kompilowanie zadań, ustawianie obiektów domeny, konfigurowanie plików źródłowych itp., Są obsługiwane przez wtyczki. Zastosowanie wtyczki do projektu oznacza, że ​​wtyczka rozszerza możliwości projektu. Wtyczki mogą wykonywać takie czynności, jak -

  • Rozszerz podstawowy model Gradle (np. Dodaj nowe elementy DSL, które można skonfigurować).
  • Skonfiguruj projekt zgodnie z konwersjami (np. Dodaj nowe zadania lub skonfiguruj rozsądne ustawienia domyślne).
  • Zastosuj określoną konfigurację (np. Dodaj repozytoria organizacyjne lub egzekwuj standardy).

Rodzaje wtyczek

W Gradle są dwa rodzaje wtyczek: wtyczki skryptowe i wtyczki binarne. Wtyczki skryptów to dodatkowy skrypt kompilacji, który zapewnia deklaratywne podejście do manipulowania kompilacją. Jest to zwykle używane w kompilacji. Wtyczki binarne to klasy, które implementują interfejs wtyczki i przyjmują programistyczne podejście do manipulowania kompilacją. Wtyczki binarne mogą znajdować się w skrypcie kompilacji, w hierarchii projektu lub zewnętrznie w pliku JAR wtyczki.

Stosowanie wtyczek

Project.apply()Metoda API służy do zastosowania konkretnej wtyczki. Możesz używać tej samej wtyczki wiele razy. Istnieją dwa typy wtyczek, jedna to wtyczka skryptowa, a druga to wtyczka binarna.

Wtyczki skryptowe

Wtyczki skryptów można zastosować ze skryptu w lokalnym systemie plików lub w zdalnej lokalizacji. Lokalizacje systemu plików są względne w stosunku do katalogu projektu, podczas gdy zdalne lokalizacje skryptów określają adres URL HTTP. Spójrz na następujący fragment kodu. Służy do stosowaniaother.gradleplugin do skryptu budowania. Użyj tego kodu wbuild.gradle plik.

apply from: 'other.gradle'

Wtyczki binarne

Każda wtyczka jest identyfikowana przez identyfikator wtyczki, ponieważ niektóre wtyczki podstawowe używają krótkich nazw, aby ją zastosować, a niektóre wtyczki społeczności używają w pełni kwalifikowanej nazwy dla identyfikatora wtyczki. Czasami pozwala określić klasę wtyczki.

Spójrz na następujący fragment kodu. Pokazuje, jak zastosować wtyczkę java, używając jej typu. Użyj tego kodu wbuild.gradle plik.

apply plugin: JavaPlugin

Spójrz na poniższy kod, aby zastosować wtyczkę core przy użyciu krótkiej nazwy. Użyj tego kodu wbuild.gradle plik.

plugins {
   id 'java'
}

Zapoznaj się z poniższym kodem, aby zastosować wtyczkę społeczności przy użyciu krótkiej nazwy. Użyj tego kodu wbuild.gradle plik.

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

Pisanie niestandardowych wtyczek

Tworząc niestandardową wtyczkę, musisz napisać implementację wtyczki. Gradle tworzy instancję wtyczki i wywołuje instancję wtyczki za pomocą metody Plugin.apply (). Poniższy przykład zawiera wtyczkę powitania, która dodaje zadanie Hello do projektu. Spójrz na poniższy kod. Użyj tego kodu wbuild.gradle plik.

apply plugin: GreetingPlugin

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

Użyj poniższego kodu, aby wykonać powyższy skrypt.

C:\> gradle -q hello

Wynik:

Hello from the GreetingPlugin

Pobieranie danych wejściowych z kompilacji

Większość wtyczek wymaga obsługi konfiguracji ze skryptu kompilacji. Projekt Gradle ma skojarzony obiekt ExtensionContainer, który pomaga śledzić wszystkie ustawienia i właściwości przekazywane do wtyczek.

Dodajmy do projektu prosty obiekt rozszerzenia. Tutaj dodajemy do projektu obiekt rozszerzenia powitania, który umożliwia skonfigurowanie powitania. Użyj tego kodu wbuild.gradle plik.

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'
}

Użyj poniższego kodu, aby wykonać powyższy skrypt.

C:\> gradle -q hello

Wynik:

Hi from Gradle

W tym przykładzie GreetingPlugin to zwykły stary obiekt Groovy z polem o nazwie message. Obiekt rozszerzenia zostanie dodany do listy wtyczek z nazwą pozdrowienia. Ten obiekt staje się następnie dostępny jako właściwość projektu o tej samej nazwie, co obiekt rozszerzenia.

Gradle dodaje zamknięcie konfiguracji dla każdego obiektu rozszerzenia, dzięki czemu można grupować ustawienia. Spójrz na poniższy kod. Użyj tego kodu wbuild.gradle plik.

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
}

Użyj poniższego kodu, aby wykonać powyższy skrypt.

C:\> gradle -q hello

Wynik:

Hello from Gradle

Standardowe wtyczki Gradle

Istnieją różne wtyczki, które są zawarte w dystrybucji Gradle.

Wtyczki językowe

Te wtyczki dodają obsługę różnych języków, które mogą być kompilowane i wykonywane w JVM.

ID wtyczki Obowiązuje automatycznie Opis
Jawa java-base Dodaje do projektu funkcje kompilacji, testowania i tworzenia pakietów Java. Służy jako podstawa dla wielu innych wtyczek Gradle.
groovy java, groovy-base Dodaje obsługę tworzenia projektów Groovy.
scala java, scala-base Dodaje obsługę tworzenia projektów Scala.
antlr Jawa Dodaje obsługę generowania parserów przy użyciu Antlr.

Inkubowanie wtyczek językowych

Te wtyczki dodają obsługę różnych języków.

ID wtyczki Obowiązuje automatycznie Opis
monter - Dodaje natywny język asemblera do projektu.
do - Dodaje możliwości kompilacji źródła C do projektu.
cpp - Dodaje funkcje kompilacji źródła C ++ do projektu.
cel C - Dodaje funkcje kompilacji źródła Objective-C do projektu.
objective-cpp - Dodaje funkcje kompilacji źródła C ++ do projektu do projektu.
zasoby systemu Windows - Dodaje obsługę dołączania zasobów systemu Windows do natywnych plików binarnych.