ग्रैडल में बिल्डडस्क्रिप्ट ब्लॉक का उद्देश्य


235

मैं स्नातक करने के लिए नया हूँ और मैं प्रलेखन पढ़ रहा हूँ, लेकिन मैं इसके कुछ हिस्सों को नहीं समझता। इनमें से एक भाग buildscriptब्लॉक के साथ जुड़ा हुआ है। इसका उद्देश्य क्या है?

यदि आपकी बिल्ड स्क्रिप्ट को बाहरी लाइब्रेरीज़ का उपयोग करने की आवश्यकता है, तो आप उन्हें स्क्रिप्ट की क्लासपाथ पर बिल्ड स्क्रिप्ट में ही जोड़ सकते हैं। आप इसका उपयोग बिल्डस्क्रिप्ट () विधि का उपयोग करके करते हैं, एक क्लोजर में गुजरता है जो बिल्ड स्क्रिप्ट क्लासपैथ घोषित करता है।

buildscript {
  repositories {
    mavenCentral()
  }
  dependencies {
    classpath group: 'commons-codec', name: 'commons-codec', version: '1.2'
  }
}

ठीक है, लेकिन क्या अंतर है:

repositories {
  mavenCentral()
}
dependencies {
  compile group: 'commons-codec', name: 'commons-codec', version: '1.2'
}

उदाहरण के लिए, इसका उपयोग करना क्यों आवश्यक है buildscript?


जवाबों:


178

buildScriptब्लॉक को निर्धारित करता है, जो प्लग इन, कार्य वर्गों, और अन्य वर्गों में उपयोग के लिए उपलब्ध बनाने के स्क्रिप्ट के बाकी । एक buildScriptब्लॉक के बिना , आप ग्रैगल आउट-ऑफ-द-बॉक्स के साथ जहाजों का उपयोग कर सकते हैं। यदि आप अतिरिक्त रूप से थर्ड-पार्टी प्लगइन्स, टास्क क्लासेस या अन्य वर्गों (बिल्ड स्क्रिप्ट में!) का उपयोग करना चाहते हैं, तो आपको buildScriptब्लॉक में संबंधित निर्भरताएँ निर्दिष्ट करनी होंगी।


2
मैं उन्हें समझ नहीं सकता। मैंने समूह केsample.infotask', name: 'infotask', version: '1.0' साथ एक कार्य वर्ग लिखा है : और स्थानीय प्रतिनिधि को अपलोड करने के लिए _uploadArchives कार्य का उपयोग करें ../lib ' किसी अन्य परियोजना में यदि मैं अपने कार्य का उपयोग करता हूं तो मुझे लिखना होगा: ` lib '}} निर्भरताएँ {classpath group:' sample.infotask ', नाम:' infotask ', संस्करण:' 1.0 '}} क्या मैं सही हूं? हमें बिल्डस्क्रिप्ट ब्लॉक का उपयोग क्यों करना चाहिए ? जब मैं आर्टिफ़िशियल लोकल अपलोड करता हूं तो मेरे पास मेरी मशीन पर जार होता है। और बस ग्रेडेल को यह बताना है कि मेरे क्लासपाथ में कहाँ और क्या डाला जाए और यहाँ क्या खास है?
Xelian

40
आपको एक buildScriptब्लॉक का उपयोग करना होगा क्योंकि ग्रेड के बाकी स्क्रिप्ट को समझने के लिए ग्रैडल को इस जानकारी की आवश्यकता है । इसलिए आपको यह जानकारी एक अलग चैनल ( buildScriptब्लॉक) में देनी होगी। तकनीकी रूप से बोलना, ग्रैड को बाकी निर्माण स्क्रिप्ट का संकलन और मूल्यांकन करने के लिए इस जानकारी की आवश्यकता है । हुड के नीचे क्या होता है ग्रैड बिल्ड स्क्रिप्ट को दो स्क्रिप्ट ( buildScriptब्लॉक और बाकी सब) में अलग करता है ताकि यह उन्हें अलग से संसाधित कर सके।
पीटर निडरविज़र

1
यदि आप अन्य उत्तर पढ़ने के बाद इस ans को पढ़ते हैं, तो आप समझ सकते हैं कि पीटर क्या कहना चाहता है (और बहुत सही है)। लेकिन दूसरी पंक्ति - "बिल्डस्क्रिप्ट ब्लॉक के बिना, आप ग्रैडल आउट-ऑफ-द-बॉक्स के साथ उन सभी चीजों का उपयोग कर सकते हैं" - जो एन्स को अस्पष्ट बनाता है।
डेक्सटर

बस एक त्वरित टिप्पणी जिसने मुझे पूरी बात समझा दी। "बिल्डडस्क्रिप्ट" का उपयोग करते समय, आप कह रहे हैं कि जो कुछ भी बिल्डप्स्क्रिप्ट {...} के अंदर निर्भरताएँ जावा / कोटलिन कोड / प्रोग्राम (या जो भी आप उपयोग कर रहे हैं) द्वारा उपयोग नहीं की जाती हैं। लेकिन इसके बजाय, वे केवल स्क्रिप्ट का उपयोग करने के लिए हैं। उदाहरण के लिए, आपको कुछ प्लगइन्स का उपयोग करने की आवश्यकता है जो डिफ़ॉल्ट रूप से प्रदान नहीं किए जाते हैं, तो आप इसे बिल्डस्क्रिप्ट {...} में जोड़ते हैं और आप इसे केवल स्क्रिप्ट पर उपयोग कर पाएंगे। आशा है कि यह मदद करता है
cesarmax

153
  • वैश्विक स्तर dependenciesऔर repositoriesवर्गों की निर्भरता सूची है जो आपके स्रोत के निर्माण और आपके स्रोत आदि को चलाने के लिए आवश्यक है।
  • buildscriptके लिए है build.gradleफ़ाइल स्वयं। तो, इसमें RPM बनाने के लिए निर्भरताएं होंगी Dockerfile, और सभी आश्रितों में कार्यों को चलाने के लिए कोई अन्य निर्भरताbuild.gradle

4
स्वयं को वर्गीकृत करने के लिए सभी एक्सटेंशन बिल्डस्क्रिप्ट-> निर्भरता के माध्यम से पाए जाते हैं, जो बदले में बिल्डडस्क्रिप्ट-> रिपॉजिटरी अनुभाग से डाउनलोड किए जाते हैं। builddscript ब्लॉक, निर्माण कार्य जैसे स्रोत संकलन आदि का निष्पादन शुरू करने से पहले पहले (बिल्ड सिस्टम तैयारी चरण) चलाया जाता है
राजा नागेंद्र कुमार

4
buildscriptबस अपने निर्माण स्क्रिप्ट के लिए निर्भरता है
slier

3
builddscript नोड.js में सर्वोच्च निर्भरता है, शीर्ष-स्तर = निर्भरताएँ।
याकूब

67

मैं पीटर के जवाब की सराहना करता हूं ... लेकिन यह तुरंत मेरे लिए स्पष्ट नहीं था कि बाकी स्क्रिप्ट का क्या मतलब था, जैसा कि उत्तर में और प्रलेखन में जोर दिया गया था।

आमतौर पर आश्रित कार्यक्षमता में लाना जावा प्रोग्राम या आपके द्वारा लिखे जा रहे अन्य प्रोग्राम में उपयोग के लिए है। स्प्रिंग इन कहते हैं, इसका उपयोग बिल्ड स्क्रिप्ट में नहीं, बल्कि जावा प्रोग्राम में किया जाना है। इसे buildscriptक्लोजर में डालने से यह सुनिश्चित होता है कि डिपेंल बिल्ड के भीतर उपयोग के लिए निर्भरताएं उपलब्ध हैं। आउटपुट प्रोग्राम नहीं।


8

"बिल्डडस्क्रिप्ट" कॉन्फ़िगरेशन अनुभाग अपने आप ही ग्रेडल के लिए है (यानी कि कैसे बिल्ड बिल्ड करने में सक्षम है) में परिवर्तन होता है। इसलिए इस अनुभाग में आमतौर पर एंड्रॉइड ग्रैडल प्लगइन शामिल होगा।


2

यह थोड़ा ऊँचा स्तर है लेकिन आशा मदद करती है।

मेरे लिए, स्पष्ट अंतर आकार लेना शुरू कर दिया जब मैंने एक बार समझना शुरू कर दिया कि बिल्डिंग ब्लॉक , विधि और कार्य क्या है। वाक्यविन्यास कैसा दिखता है, आप उन्हें कैसे कॉन्फ़िगर कर सकते हैं आदि। इसलिए मेरा सुझाव है कि आप इन सभी के माध्यम से जाते हैं। उसके बाद, आप इस सिंटैक्स से समझ बनाना शुरू कर सकते हैं।

फिर यह जानना बहुत जरूरी है कि ऑब्जेक्ट बिल्ड का प्रकार क्या है। इसका उत्तर होगा कि 'बिल्डस्क्रिप्ट' और अन्य कहां से आए हैं। और अपनी क्षमताओं / सुविधाओं का विस्तार करने के लिए (चलो एंड्रॉइड कहते हैं), देखें कि प्लगइन्स कैसे मदद कर सकते हैं।

अंतिम लेकिन कम से कम, यहां एक बहुत अच्छा ट्यूटोरियल है जो क्लोजर के बारे में बात करता है, प्रतिनिधियों को जो स्क्रिप्ट को समझने के लिए आवश्यक अवधारणाएं हैं।


1

Android शीर्ष-स्तरीय ग्रेडल फ़ाइल का प्रदर्शन करके थोड़ा और स्पष्टीकरण।

buildscript {
    // this is where we are going to find the libraries defined in "dependencies block" at below
    repositories {
        google()
        jcenter()
        maven { url 'https://dl.bintray.com/kotlin/kotlin-eap' }
    }

    // everything listed in the dependencies is actually a plugin, which we'll do "apply plugin" in our module level gradle file.
    dependencies {
        classpath 'com.android.tools.build:gradle:3.4.2' // this is android gradle plugin
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // kotlin gradle plugin
    }
}

मॉड्यूल स्तर ग्रेड फ़ाइल

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

"प्लगइन" क्या है? वे सिर्फ जावा क्लासेस हैं, जो प्लगइन इंटरफेस को लागू करते हैं। इंटरफ़ेस के तहत, इसमें विभिन्न नामों के साथ कई कार्य ऑब्जेक्ट जोड़ने के लिए एक विधि "लागू" है। टास्क एक ऐसा वर्ग है जहाँ हम वर्कफ़्लो को लागू कर सकते हैं। उदाहरण के लिए, बिल्ड कार्य में ऐप के निर्माण का प्रवाह होता है।

तो, बिल्डस्क्रिप्ट क्या करता है? यह परिभाषित करता है कि प्लगइन्स को कहां खोजना है। प्लगइन क्या करता है? इसमें कई कार्य शामिल हैं। कार्य क्या करता है? यह हमें बिल्ड, इंस्टाल, लिंट इत्यादि प्रदान करता है।

मेरी समझ गलत हो सकती है। अगर आपको कुछ भ्रामक लगता है तो कृपया मुझे सुधारने में संकोच न करें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.