Gradle - Eklentiler

Eklenti, görevler kümesinden başka bir şey değildir; görevlerin derlenmesi, etki alanı nesnelerinin ayarlanması, kaynak dosyaların ayarlanması gibi hemen hemen tüm yararlı görevler eklentiler tarafından gerçekleştirilir. Bir projeye bir eklenti uygulamak, eklentinin projenin yeteneklerini genişletmesine izin vermek anlamına gelir. Eklentiler aşağıdaki gibi şeyler yapabilir:

  • Temel Gradle modelini genişletin (ör. Yapılandırılabilen yeni DSL öğeleri ekleyin).
  • Projeyi dönüşümlere göre yapılandırın (ör. Yeni görevler ekleyin veya mantıklı varsayılanları yapılandırın).
  • Spesifik konfigürasyonu uygulayın (ör. Kurumsal havuzlar ekleyin veya standartları uygulayın).

Eklenti Türleri

Gradle'da iki tür eklenti vardır: komut dosyası eklentileri ve ikili eklentiler. Komut dosyası eklentileri, yapıyı değiştirmek için bildirimsel bir yaklaşım sağlayan ek bir yapı betiğidir. Bu genellikle bir yapı içinde kullanılır. İkili eklentiler, eklenti arayüzünü uygulayan ve yapıyı değiştirmek için programlı bir yaklaşım benimseyen sınıflardır. İkili eklentiler, proje hiyerarşisiyle birlikte bir yapı komut dosyasıyla veya harici olarak bir eklenti JAR'da bulunabilir.

Eklentileri Uygulama

Project.apply()API yöntemi, belirli eklentiyi uygulamak için kullanılır. Aynı eklentiyi birden çok kez kullanabilirsiniz. İki tür eklenti vardır, biri komut dosyası eklentisi ve ikincisi ikili eklentidir.

Komut Dosyası Eklentileri

Komut dosyası eklentileri, yerel dosya sistemindeki bir komut dosyasından veya uzak bir konumda uygulanabilir. Dosya sistemi konumları proje dizinine göredir, uzak komut dosyası konumları ise HTTP URL'sini belirtir. Aşağıdaki kod parçasına bir göz atın. Uygulamak için kullanılırother.gradlederleme betiğine eklenti. Bu kodu şurada kullanınbuild.gradle dosya.

apply from: 'other.gradle'

İkili Eklentiler

Her eklenti, bazı temel eklentilerin onu uygulamak için kısa adlar kullandığı ve bazı Topluluk eklentilerinin eklenti kimliği için tam nitelikli adı kullandığı eklenti kimliğiyle tanımlanır. Bir süre eklenti sınıfını belirlemeye izin verir.

Aşağıdaki kod parçacığına bir göz atın. Java eklentisinin türünü kullanarak nasıl uygulanacağını gösterir. Bu kodu şurada kullanınbuild.gradle dosya.

apply plugin: JavaPlugin

Kısa ad kullanarak çekirdek eklenti uygulamak için aşağıdaki koda bir göz atın. Bu kodu şurada kullanınbuild.gradle dosya.

plugins {
   id 'java'
}

Kısa ad kullanarak topluluk eklentisi uygulamak için aşağıdaki koda bir göz atın. Bu kodu şurada kullanınbuild.gradle dosya.

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

Özel Eklentiler Yazma

Özel bir eklenti oluştururken, bir eklenti uygulaması yazmanız gerekir. Gradle, eklentiyi başlatır ve Plugin.apply () yöntemini kullanarak eklenti örneğini çağırır. Aşağıdaki örnek, projeye bir merhaba görevi ekleyen bir karşılama eklentisi içerir. Aşağıdaki koda bir göz atın. Bu kodu şurada kullanınbuild.gradle dosya.

apply plugin: GreetingPlugin

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

Yukarıdaki komut dosyasını yürütmek için aşağıdaki kodu kullanın.

C:\> gradle -q hello

Çıktı:

Hello from the GreetingPlugin

Derlemeden Girdi Alma

Eklentilerin çoğu, yapı komut dosyasından yapılandırma desteğine ihtiyaç duyar. Gradle projesi, eklentilere aktarılan tüm ayarların ve özelliklerin izlenmesine yardımcı olan ilişkili bir ExtensionContainer nesnesine sahiptir.

Projeye basit bir uzantı nesnesi ekleyelim. Burada projeye selamlamayı yapılandırmanıza izin veren bir selamlama uzantısı nesnesi ekliyoruz. Bu kodu şurada kullanınbuild.gradle dosya.

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

Yukarıdaki komut dosyasını yürütmek için aşağıdaki kodu kullanın.

C:\> gradle -q hello

Çıktı:

Hi from Gradle

Bu örnekte, TebrikPlugin, mesaj adı verilen bir alana sahip düz eski bir Groovy nesnesidir. Uzantı nesnesi, tebrik adıyla eklenti listesine eklenir. Bu nesne daha sonra uzantı nesnesiyle aynı ada sahip bir proje özelliği olarak kullanılabilir hale gelir.

Gradle, her uzantı nesnesi için bir yapılandırma kapanışı ekler, böylece ayarları bir arada gruplandırabilirsiniz. Aşağıdaki koda bir göz atın. Bu kodu şurada kullanınbuild.gradle dosya.

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
}

Yukarıdaki komut dosyasını yürütmek için aşağıdaki kodu kullanın.

C:\> gradle -q hello

Çıktı:

Hello from Gradle

Standart Gradle Eklentileri

Gradle dağıtımına dahil olan farklı eklentiler vardır.

Dil Eklentileri

Bu eklentiler, JVM'de derlenip çalıştırılabilen çeşitli diller için destek ekler.

Eklenti Kimliği Otomatik Olarak Uygulanır Açıklama
java java tabanı Bir projeye Java derleme, test etme ve gruplama yetenekleri ekler. Diğer Gradle eklentilerinin çoğunun temelini oluşturur.
harika java, harika tabanlı Groovy projeleri oluşturmak için destek ekler.
skala java, ölçek tabanı Scala projeleri oluşturmak için destek ekler.
antlr Java Antlr kullanarak ayrıştırıcı oluşturmak için destek ekler.

Kuluçka Dil Eklentileri

Bu eklentiler, çeşitli diller için destek ekler.

Eklenti Kimliği Otomatik Olarak Uygulanır Açıklama
montajcı - Bir projeye yerel montaj dili yetenekleri ekler.
c - Bir projeye C kaynak derleme yetenekleri ekler.
cpp - Bir projeye C ++ kaynak derleme yetenekleri ekler.
amaç-c - Bir projeye Objective-C kaynak derleme yetenekleri ekler.
amaç-cpp - Bir projeye Objective-C ++ kaynak derleme yetenekleri ekler.
Windows kaynakları - Windows kaynaklarını yerel ikili dosyalara dahil etmek için destek ekler.