Gradle eklentisi uygulamadaki fark nedir


187

Gradle plugins bloğunu anlamıyorum

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

ve diğeri:

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

İlk blokta bazı eklenti adlarımız var. ikinci bir paket ve versiyonda. İlk bloğu nerede ve ne zaman ikinci bloğu kullanmam gerektiğini anlamıyorum.


30
Gradle ile aynı şeyi yapmanın 2'den fazla yolunu görmeye hazır olun!
Paulo Merson

7
Gradle yapı sistemlerinin Perl'i.
sakra

Yanıtlar:


178

pluginsBlok eklentileri uygulanması yeni bir yöntemdir, ve mevcut olmalıdır Gradle eklenti depo . applyYaklaşım yapı için eklenti eklemenin daha eski, henüz daha esnek bir yöntemdir.

Yeni pluginsyöntem çoklu proje yapılandırmalarında ( subprojects, allprojects) çalışmaz, ancak her alt proje için derleme yapılandırmasında çalışır.

İşlevsellik ilerledikçe, pluginsyapılandırma yönteminin eski yaklaşımı geçeceğini düşünürüm , ancak bu noktada hem eşzamanlı olarak hem de kullanılabilir.


4
DSL ( plugins {...}) eklentilerini kullanarak bir eklenti uygulamanın , resmi Gradle eklenti deposunda yayınlanmayan özel eklentileriniz veya şirket eklentileriniz için çalışmadığını unutmayın. Bu yüzden umarım eski yaklaşım en azından yenisi özel depolarda aramayı destekleyene kadar hayatta kalacaktır.
Datz

2
pluginsGradle öğretici (Gradle sürüm 5.6.2) 'e göre, çoklu projede çalıştığını guides.gradle.org/creating-multi-project-builds/... O kullanır pluginsile blok apply falsegenel projeye eklenti eklemek için, ancak eklemez Kök projeye. Alt proje pluginseklentiyi eklemek için blokları tekrar kullanır .
yetsun

Kullanmanın hiçbir anlamı yok olduğunu pluginsüzerinde apply plugin.
sakra

1
2020 ve hala kullanıyorumapply plugin
Blundell

Bu kesinlikle korkunç, tamamen farklı sözdizimi ve girdileri olan iki yönerge, üstte uyumsuz. Gradle, Java ve Kotlin kullanırken boyundaki en büyük ağrıdır.
Hıristiyan

57

@Cjstehno tarafından daha önce de belirtildiği gibi, kaçınmanız gereken apply plugineski bir yöntemdir.

DSL eklentilerinin piyasaya sürülmesiyle, kullanıcıların eklentileri uygulamak için eski yöntemi kullanmak için çok az nedeni olmalıdır. Bir yapı yazarının şu anda nasıl çalıştığına dair kısıtlamalar nedeniyle DSL eklentilerini kullanamaması durumunda burada belgelenmiştir.

Yeni plugins blockyöntemle, bir eklenti ekleyebilir ve isteğe bağlı bir parametre kullanarak ne zaman uygulanacağını denetleyebilirsiniz apply:

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

Bloğunuza zaten eklenmiş ancak uygulanmamış bir eklenti uygulamak istediğiniz durumlarda eski yöntemi kullanmaya devam edersiniz plugins. Örneğin, ana projede bir eklenti xyzeklenir, ancak uygulanmaz ve yalnızca bir alt projede uygulanmalıdır subPro:

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

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

Artık sürüme ihtiyacınız olmadığına dikkat edin. Versiyon gereklidir pluginsaşağıdakiler gibi, Çekirdek Gradle eklentileri birini kullanmıyorsanız bloğu java, scala...

Bir Spring Bootuygulama oluşturmaya çalışırken farkı anlamak için biraz zaman harcadım ve bu yüzden bir süre sonra tekrar cevap veriyorum. Spring BootEklenti kullanmak için aşağıdaki örnek bana çok yardımcı oldu:

Şu anda ne kullanılmalıdır:

plugins {
  id "org.springframework.boot" version "2.0.1.RELEASE"
}

Gradle 2.1'den önce ne kullanılmıştı:

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"

Bu bir şekilde yanlış izlenim veriyor. Bir sade dönüştürmek olamaz apply plugin xxxiçin plugins { id xxx }(Ben denedim ve işe yaramadı)
Christian

Bence cevap ve alıntı yapılan belgeler bunu açıkça belirtiyor. Bu sizin durumunuza bağlıdır. Vakanız hakkında daha fazla bilgi sağlayabilir veya bunu farklı bir soruya gönderebilirsiniz.
Mousa
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.