ग्रेडिंग प्लगइन को लागू करने में क्या अंतर है


187

मुझे समझ में नहीं आता है कि प्लगइन्स प्लग इन ब्लॉक हैं

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

और अन्य एक:

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

पहले ब्लॉक में हमारे पास कुछ प्लगइन नाम है। दूसरे एक पैकेज और संस्करण में। मुझे समझ नहीं आ रहा है कि मुझे पहले ब्लॉक का उपयोग कहां करना चाहिए और कब दूसरे को।


30
ग्रैडल के साथ, एक ही काम करने के 2+ तरीके देखने के लिए तैयार हो जाएं!
पाउलो मर्सन

7
ग्रैड बिल्ड सिस्टम का पर्ल है।
सकरा

जवाबों:


178

pluginsब्लॉक प्लगइन्स को लागू करने के नए विधि है, और वे में उपलब्ध होना चाहिए Gradle प्लगइन भंडारapplyदृष्टिकोण पुराने, अपने निर्माण करने के लिए एक प्लगइन जोड़ने की अभी तक अधिक लचीला तरीका है।

नई pluginsपरियोजना मल्टी-प्रोजेक्ट कॉन्फ़िगरेशन में काम नहीं करती है (subprojects ,allprojects ) , लेकिन प्रत्येक बच्चे के प्रोजेक्ट के लिए बिल्ड कॉन्फ़िगरेशन पर काम करेगी।

मुझे लगता है कि जैसे-जैसे कार्यक्षमता pluginsआगे बढ़ेगी , कॉन्फ़िगरेशन पद्धति पुराने दृष्टिकोण से आगे निकल जाएगी, लेकिन इस बिंदु पर दोनों का समान रूप से उपयोग किया जा सकता है।


4
ध्यान रखें, कि प्लगइन्स डीएसएल ( plugins {...}) का उपयोग करके एक प्लगइन को लागू करना आपके निजी प्लगइन्स या कंपनी के प्लगइन्स के लिए काम नहीं करता है जो कि आधिकारिक ग्रेड प्लगइन रेपो में प्रकाशित नहीं होते हैं। इसीलिए मुझे उम्मीद है कि नया दृष्टिकोण निजी रिपॉजिटरी में खोज का समर्थन करने तक पुराना दृष्टिकोण कम से कम जीवित रहेगा।
डाट्ज

2
pluginsबहु परियोजना में काम करता है, Gradle ट्यूटोरियल (Gradle संस्करण 5.6.2) के अनुसार guides.gradle.org/creating-multi-project-builds/... यह का उपयोग करता है pluginsके साथ ब्लॉक apply falseसमग्र परियोजना के लिए प्लगइन जोड़ने के लिए है, लेकिन नहीं जोड़ता है यह मूल परियोजना के लिए है। सबप्रोजेक्ट pluginsप्लगइन को जोड़ने के लिए फिर से ब्लॉक का उपयोग करता है ।
येट्सुन

pluginsओवर का उपयोग करने का कोई मतलब नहीं है apply plugin
सकरा

1
2020 और मैं अभी भी उपयोग कर रहा हूँapply plugin
ब्लंडेल

यह बिल्कुल भयानक है, पूरी तरह से अलग सिंटैक्स और इनपुट के साथ दो निर्देश, जिनमें से शीर्ष पर असंगत है। जावा और कोटलिन का उपयोग करते समय गले में ग्रैड अब तक का सबसे बड़ा दर्द है।
ईसाई

57

जैसा कि @cjstehno द्वारा पहले ही उल्लेख किया गया apply pluginहै, एक विरासत विधि है जिससे आपको बचना चाहिए।

प्लगइन्स डीएसएल की शुरूआत के साथ, उपयोगकर्ताओं के पास प्लगइन्स लगाने की विरासत विधि का उपयोग करने के लिए बहुत कम कारण होना चाहिए। यदि यह वर्तमान में काम करता है, तो प्रतिबंध के कारण एक बिल्ड लेखक प्लगइन्स डीएसएल का उपयोग नहीं कर सकता है, यह यहां दस्तावेजित है।

नई 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ब्लॉक में आवश्यक है जब तक कि आप कोर ग्रैडल प्लगइन्स में से एक का उपयोग नहीं कर रहे हैं, जैसे कि java,scala ...

मैंने Spring Bootएप्लिकेशन बनाने का प्रयास करते हुए अंतर को समझने में कुछ समय बिताया , और इसीलिए मैं थोड़ी देर बाद फिर से इसका उत्तर दे रहा हूं। प्लगइन का उपयोग करने के लिए निम्न उदाहरणSpring Boot मुझे बहुत मदद मिली:

वर्तमान में क्या उपयोग किया जाना चाहिए:

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

ग्रेडल 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 }(मैं इसे करने की कोशिश की और यह काम नहीं किया था)
ईसाई

मुझे लगता है कि उत्तर और उद्धृत प्रलेखन यह स्पष्ट रूप से बताता है। यह आपके मामले पर निर्भर करता है। आप अपने मामले के बारे में अधिक जानकारी प्रदान कर सकते हैं या इसे एक अलग प्रश्न में पोस्ट कर सकते हैं।
मौसा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.