Apa bedanya menerapkan plugin gradle

187

Saya tidak mengerti blok plugins gradle

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

dan yang lainnya:

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

Di blok pertama, kami memiliki beberapa nama plugin. dalam paket dan versi yang kedua. Saya tidak mengerti di mana saya harus menggunakan blok pertama dan kapan blok kedua.

Yevgen Kulik
sumber
30
Dengan Gradle, bersiap-siaplah untuk melihat 2+ cara untuk melakukan hal yang sama!
Paulo Merson
7
Gradle adalah Perl sistem build.
sakra

Jawaban:

178

The pluginsblok adalah metode baru menerapkan plugin, dan mereka harus tersedia dalam repositori plugin yang Gradle . Ituapply Pendekatan adalah lebih tua, metode namun lebih fleksibel menambahkan plugin untuk membangun Anda.

pluginsMetode baru tidak berfungsi dalam konfigurasi multi-proyek ( subprojects, allprojects), tetapi akan bekerja pada konfigurasi bangun untuk setiap proyek anak.

Saya akan berpikir bahwa ketika fungsionalitas berkembang, pluginsmetode konfigurasi akan mengambil alih pendekatan yang lebih lama, tetapi pada titik ini keduanya dapat dan digunakan secara bersamaan.

cjstehno
sumber
4
Perlu diingat, bahwa menerapkan plugin menggunakan plugin DSL ( plugins {...}) tidak berfungsi untuk plugin pribadi Anda atau plugin perusahaan yang tidak dipublikasikan ke repo plugin Gradle resmi. Itu sebabnya saya berharap pendekatan lama setidaknya akan bertahan sampai yang baru mendukung pencarian di repositori pribadi.
Datz
2
pluginsberfungsi dalam multi-proyek, menurut tutorial Gradle (Gradle versi 5.6.2) guides.gradle.org/creating-multi-project-builds/... Ia menggunakan pluginsblok dengan apply falseuntuk menambahkan plugin ke proyek keseluruhan, tetapi tidak menambahkan ke proyek root. Subproyek menggunakan pluginsblok lagi untuk menambahkan plugin.
yetsun
Sebenarnya tidak ada gunanya menggunakan pluginslebih apply plugin.
sakra
1
2020 dan saya masih menggunakanapply plugin
Blundell
Ini benar-benar mengerikan, dua arahan dengan sintaks dan input yang sama sekali berbeda, di atas semuanya tidak sesuai. Gradle sejauh ini merupakan rasa sakit terbesar di leher saat menggunakan Java dan Kotlin.
Christian
57

Seperti yang telah disebutkan oleh @cjstehno, apply pluginini adalah metode warisan yang harus Anda hindari.

Dengan diperkenalkannya DSL plugins, pengguna harus memiliki sedikit alasan untuk menggunakan metode lama menerapkan plugin. Itu didokumentasikan di sini dalam kasus pembuat build tidak dapat menggunakan plugins DSL karena pembatasan dalam cara kerjanya.

Dengan plugins blockmetode baru , Anda dapat menambahkan plugin dan mengontrol kapan menerapkannya menggunakan parameter opsional apply:

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

Anda masih akan menggunakan metode lawas dalam situasi di mana Anda ingin menerapkan plugin yang sudah ditambahkan tetapi tidak diterapkan di pluginsblok Anda . Misalnya, dalam proyek master, sebuah plugin xyzditambahkan tetapi tidak diterapkan dan itu harus diterapkan hanya dalam sub proyek subPro:

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

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

Perhatikan bahwa Anda tidak membutuhkan versi itu lagi. Versi ini diperlukan di pluginsblok kecuali Anda menggunakan salah satu plugin Core Gradle, seperti java,scala ...

Saya menghabiskan waktu memahami perbedaan ketika mencoba membuat Spring Bootaplikasi, dan itulah sebabnya saya menjawab ini lagi setelah beberapa saat. Contoh berikut untuk menggunakan Spring Bootplugin membantu saya:

Apa yang saat ini harus digunakan:

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

Apa yang telah digunakan sebelum 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"
Mousa
sumber
Ini entah bagaimana memberikan kesan yang salah. Satu tidak bisa hanya mengkonversi apply plugin xxxke plugins { id xxx }(saya mencobanya dan itu tidak bekerja)
Christian
Saya pikir jawabannya dan dokumentasi yang dikutip menyatakan ini dengan jelas. Ini tergantung pada kasus Anda. Anda dapat memberikan informasi lebih lanjut tentang kasus Anda atau memposting ini dalam pertanyaan yang berbeda.
Mousa