ความแตกต่างในการใช้ปลั๊กอิน gradle คืออะไร


187

ฉันไม่เข้าใจบล็อกปลั๊กอิน gradle

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

และอีกหนึ่ง:

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

ในบล็อกแรกเรามีชื่อปลั๊กอินบางส่วน ในแพ็คเกจที่หนึ่งและเวอร์ชันที่สอง ฉันไม่เข้าใจที่ฉันควรใช้บล็อกแรกและบล็อกที่สอง


30
ด้วย Gradle เตรียมตัวให้พร้อมเพื่อดูวิธี 2 อย่างในการทำสิ่งเดียวกัน!
เปาโลเมอร์สัน

7
Gradle เป็น Perl ของระบบการสร้าง
Sakra

คำตอบ:


178

pluginsบล็อกเป็นวิธีใหม่ของการใช้ปลั๊กอินและพวกเขาจะต้องมีอยู่ในพื้นที่เก็บข้อมูลปลั๊กอิน Gradle applyวิธีคือเก่าวิธีการยังมีความยืดหยุ่นมากขึ้นของการเพิ่มปลั๊กอินเพื่อสร้างของคุณ

pluginsวิธีการใหม่ไม่ทำงานในการกำหนดค่าหลายโครงการ ( subprojects, allprojects) แต่จะทำงานกับการกำหนดค่าการสร้างสำหรับแต่ละโครงการลูก

ฉันคิดว่าในขณะที่ฟังก์ชั่นดำเนินการpluginsวิธีการกำหนดค่าจะแซงหน้าแนวทางเก่า แต่ ณ จุดนี้ทั้งสองสามารถและใช้พร้อมกัน


4
โปรดทราบว่าการใช้ปลั๊กอินโดยใช้ปลั๊กอิน DSL ( plugins {...}) ไม่สามารถใช้งานได้กับปลั๊กอินส่วนตัวหรือปลั๊กอินของ บริษัท ที่ไม่ได้เผยแพร่ใน repo ปลั๊กอิน Gradle อย่างเป็นทางการ นั่นเป็นเหตุผลที่ฉันหวังว่าวิธีการแบบเก่าจะมีชีวิตรอดอย่างน้อยก็จนกว่าวิธีการใหม่จะรองรับการค้นหาในที่เก็บส่วนตัว
Datz

2
pluginsทำงานในหลายโครงการตามคู่มือการสอนของ Gradle (รุ่น Gradle 5.6.2) guide.gradle.org/creating-multi-project-builds/ ......มันใช้pluginsblock with apply falseเพื่อเพิ่มปลั๊กอินในโครงการโดยรวม แต่ไม่ได้เพิ่ม ให้กับโครงการรูท โครงการย่อยใช้pluginsบล็อกอีกครั้งเพื่อเพิ่มปลั๊กอิน
yetsun

จริงๆมีจุดในการใช้ไม่มีมากกว่าplugins apply plugin
Sakra

1
2020 และฉันยังใช้อยู่apply plugin
Blundell

นี่เป็นคำสั่งที่แย่มากอย่างแน่นอนสองคำสั่งที่มีไวยากรณ์และอินพุตที่ต่างกันโดยสิ้นเชิงซึ่งเข้ากันไม่ได้ Gradle เป็นอาการปวดที่คอที่สุดเมื่อใช้ Java และ Kotlin
คริสเตียน

57

ตามที่กล่าวถึงแล้วโดย @cjstehno apply pluginเป็นวิธีการดั้งเดิมที่คุณควรหลีกเลี่ยง

ด้วยการแนะนำปลั๊กอิน DSL ผู้ใช้ควรมีเหตุผลเล็กน้อยที่จะใช้วิธีดั้งเดิมในการใช้ปลั๊กอิน มีการบันทึกไว้ที่นี่ในกรณีที่ผู้สร้างบิลด์ไม่สามารถใช้ปลั๊กอิน DSL เนื่องจากข้อ จำกัด ในการใช้งานในปัจจุบัน

ด้วยplugins blockวิธีการใหม่คุณสามารถเพิ่มปลั๊กอินและควบคุมได้ว่าจะใช้เมื่อใดโดยใช้พารามิเตอร์เพิ่มเติมapply:

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

คุณยังคงใช้วิธีดั้งเดิมในสถานการณ์ที่คุณต้องการใช้ปลั๊กอินที่เพิ่มไว้แล้ว แต่ไม่ได้ใช้ในpluginsบล็อกของคุณ เช่นในโครงการหลักxyzจะมีการเพิ่มปลั๊กอินแต่ไม่ได้ใช้และควรใช้กับโครงการย่อยเท่านั้นsubPro:

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

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

โปรดสังเกตว่าคุณไม่ต้องการเวอร์ชันอีกต่อไป รุ่นเป็นสิ่งจำเป็นในpluginsบล็อกจนกว่าคุณจะใช้หนึ่งในแกนปลั๊กอิน Gradle เช่นjava,scala ...

ฉันใช้เวลาทำความเข้าใจความแตกต่างขณะพยายามสร้างSpring Bootแอปพลิเคชันและนั่นเป็นสาเหตุที่ฉันตอบคำถามนี้อีกครั้งหลังจากผ่านไประยะหนึ่ง ตัวอย่างต่อไปนี้สำหรับการใช้Spring Bootปลั๊กอินช่วยฉันได้มาก:

สิ่งที่ควรใช้ในปัจจุบัน:

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

สิ่งที่เคยใช้ก่อน 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"

สิ่งนี้ทำให้เกิดความรู้สึกผิด ๆ หนึ่งไม่สามารถแปลงapply plugin xxxเป็นplugins { id xxx }(ฉันลองและไม่ได้ทำงาน)
คริสเตียน

ฉันคิดว่าคำตอบและเอกสารอ้างอิงที่กล่าวมานี้ชัดเจน ขึ้นอยู่กับกรณีของคุณ คุณสามารถให้ข้อมูลเพิ่มเติมเกี่ยวกับเคสของคุณหรือโพสต์นี้ในคำถามอื่น
มูซา
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.