ग्रैड रैपर फ़ाइलों को कैसे / कब जनरेट करें?


212

मैं समझने की कोशिश कर रहा हूं कि ग्रैडल रैपर कैसे काम करता है। कई स्रोत भंडार में, मैं निम्नलिखित संरचना देखता हूं:

projectRoot/
    src/
    build.gradle
    gradle.properties
    settings.gradle
    gradlew
    gradlew.bat
    gradle/
        wrapper/
            gradle-wrapper.jar
            gradle-wrapper.properties

मेरे सवाल:

  1. कैसे / कब उत्पन्न करता है gradlew/ gradlew.bat? क्या आप उन्हें केवल एक बार उत्पन्न करने वाले हैं, जब परियोजना पहली बार बनाई गई है, तो क्या आप हर बार आपके द्वारा किए गए / परिवर्तन में बदलाव करते हैं? और वे कैसे उत्पन्न होते हैं?
  2. ऊपर एक ही सवाल है, लेकिन gradle/wrapper/*फ़ाइलों के लिए ( gradle-wrapper.jarऔर gradle-wrapper.properties)?
  3. कुछ बार मुझे *.gradleप्रोजेक्ट की gradleडायरेक्टरी के अंदर अन्य फाइल्स दिखाई देती हैं । ये अतिरिक्त ग्रेड फ़ाइल क्या हैं और वे क्या प्रतिनिधित्व / करती हैं? कस्टम प्लगइन्स?
  4. उन गुणों में क्या अंतर है जो settings.gradleबनाम में जाते हैं जो अंदर परिभाषित किया जाना चाहिए gradle.properties?

जवाबों:


250
  1. आप इसे एक बार जनरेट करते हैं, और फिर से जब आप परियोजना में उपयोग किए जाने वाले ग्रेड के संस्करण को बदलना चाहते हैं। इतनी बार उत्पन्न करने की कोई आवश्यकता नहीं है। यहाँ डॉक्स हैं। रैपर संरचना प्राप्त करने के लिए इस wrapperकार्य को build.gradleफाइल करने और चलाने के लिए बस कार्य जोड़ें ।

    मन है कि आप एक आवरण उत्पन्न करने के लिए स्नातक स्थापित करने की आवश्यकता है । जी-इकोसिस्टम कलाकृतियों के प्रबंधन के लिए महान उपकरण एसडीकेमैन है! । एक ग्रेडल रैपर उत्पन्न करने के लिए, build.gradleफ़ाइल में निम्नलिखित कोड जोड़ें :

    task wrapper(type: Wrapper) {
       gradleVersion = '2.0' //version required
    }
    

    और भाग खड़ा हुआ:

    gradle wrapper
    

    कार्य। परिणामी फ़ाइलों को SCM (जैसे git) में जोड़ें और अब से सभी डेवलपर्स के पास ग्रेडल रैपर का उपयोग करते समय ग्रेडेल का एक ही संस्करण होगा।

    ग्रेडल 2.4 (या उच्चतर) के साथ आप एक समर्पित कार्य को जोड़े बिना एक आवरण स्थापित कर सकते हैं:

    gradle wrapper --gradle-version 2.3
    

    या

    gradle wrapper --gradle-distribution-url https://myEnterpriseRepository:7070/gradle/distributions/gradle-2.3-bin.zip
    

    सभी विवरण यहां देखे जा सकते हैं

ग्रैडल 3.1 --distribution-typeविकल्प से भी इस्तेमाल किया जा सकता है। विकल्प बाइनरी और सभी और बिन हैंसभी अतिरिक्त रूप से स्रोत कोड और प्रलेखन शामिल हैं। जब आईडीई का उपयोग किया जाता है तो सब बेहतर होता है, इसलिए संपादक बेहतर काम करता है। दोष यह है कि निर्माण अधिक समय तक हो सकता है (अधिक डेटा डाउनलोड करने की आवश्यकता है, CI सर्वर पर बेकार) और यह अधिक स्थान लेगा।

  1. ये ग्रैडल रैपर फाइलें हैं। आपको उन्हें एक बार (किसी विशेष संस्करण के लिए) उत्पन्न करने और संस्करण नियंत्रण में जोड़ने की आवश्यकता है। यदि आपको ग्रैडल आवरण के संस्करण को बदलने की आवश्यकता है, तो संस्करण को build.gradleदेखने में बदलें (1.) और फ़ाइलों को पुन: उत्पन्न करें।

  2. एक विस्तृत उदाहरण दीजिए। इस तरह की फ़ाइल के कई उद्देश्य हो सकते हैं: मल्टी-मॉड्यूल प्रोजेक्ट, जिम्मेदारी पृथक्करण, थोड़ा संशोधित स्क्रिप्ट आदि।

  3. settings.gradleपरियोजना की संरचना (मॉड्यूल, नाम, आदि) के लिए जिम्मेदार है, जबकि, gradle.propertiesपरियोजना और ग्रेड के बाहरी विवरण (संस्करण, कमांड लाइन तर्क -XX, गुण आदि) के लिए उपयोग किया जाता है ।


धन्यवाद @ ओपल (+1) - आपको # 3 के लिए एक विशिष्ट उदाहरण देने के लिए, नेटफ्लिक्स-यूरेका देखें । ये ग्रेड फाइल क्या हैं?!?
एसएमबी

ठीक है, मैं इसे देखता हूं। जहां तक ​​मैं देखता हूं, नेटफ्लिक्स के डेवलपर्स ने सिर्फ एक बड़ी build.gradleस्क्रिप्ट को कई छोटे में विभाजित किया है , और एक विशेष उद्देश्य स्क्रिप्ट के लिए समर्पित है। जैसा कि आप कर सकते हैं स्क्रिप्ट के नीचे स्थित ढाल एक मुख्य build.gradleफ़ाइल के लिए आवेदन किया है , देखें: github.com/Netflix/eureka/blob/master/build.gradle । जहाँ आप ऐसे मॉड्यूल लगाते हैं वह आपकी पसंद का होता है। यह सब सामान्य तौर पर है। यदि आप उत्तर से संतुष्ट हैं तो कृपया उत्तर स्वीकार करें :)
Opal

1
एक अन्य उपयोगी कमांड-लाइन विकल्प है --distribution-type, उदाहरण के लिए,gradle wrapper --gradle-version 4.3.1 --distribution-type ALL
हेनेनी

1
धन्यवाद @ हेनेनी, इसे मेरे उत्तर में जोड़ देंगे।
ओपल

टिप: एंड्रॉइड स्टूडियो के इंस्टॉलेशन फोल्डर में एक ग्रेड है।
ट्वीस्टरेब

29

ग्रैडल आवरण उत्पन्न करना

प्रोजेक्ट बिल्ड ग्रेडेल

// Top-level build file where you can add configuration options common to all sub-projects/modules.

// Running 'gradle wrapper' will generate gradlew - Getting gradle wrapper working and using it will save you a lot of pain.
task wrapper(type: Wrapper) {
    gradleVersion = '2.2' 
}

// Look Google doesn't use Maven Central, they use jcenter now.
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.0.1'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

फिर कमांड-लाइन रन पर

gradle wrapper

यदि आप अपने सिस्टम पर इसे गुम कर रहे हैं तो इसे इंस्टॉल करें या ऊपर काम नहीं करेगा। मैक पर होमब्रे के माध्यम से इंस्टॉल करना सबसे अच्छा है।

brew install gradle

आपके द्वारा सफलतापूर्वक आवरण कार्य चलाने और उत्पन्न करने के बाद gradlew, अपने सिस्टम ग्रेडेल का उपयोग न करें। यह आपको बहुत सारे सिरदर्द से बचाएगा।

./gradlew assemble

ऊपर देखा गया प्लगिन प्लगइन के बारे में क्या?

com.android.tools.build:gradle:1.0.1

आपको संस्करण को नवीनतम सेट करना चाहिए और आप उपकरण पृष्ठ की जांच कर सकते हैं और तदनुसार संस्करण को संपादित कर सकते हैं ।

देखें कि एंड्रॉइड स्टूडियो क्या उत्पन्न करता है

ग्रेडेल और नवीनतम एंड्रॉइड स्टूडियो के अलावा ने प्रोजेक्ट लेआउट को नाटकीय रूप से बदल दिया है। यदि आपके पास एक पुरानी परियोजना है, तो मैं नवीनतम एंड्रॉइड स्टूडियो के साथ एक स्वच्छ बनाने की सलाह देता हूं और देखें कि Google मानक परियोजना को क्या मानता है।

एंड्रॉइड स्टूडियो में पुरानी परियोजनाओं को आयात करने की सुविधाएं हैं जो मदद भी कर सकती हैं।


gradleVersion = '2.2'में taskWrapperजो कुछ भी संस्करण मैं आवरण पैदा करने के लिए इच्छा, सही उपयोग कर सकते हैं? क्या ग्रेडेल का नवीनतम संस्करण होना जरूरी नहीं है?
राफिया

1
मुझे लगता है कि आप 2-सीरीज़ के ग्रेडेल में वापस जा सकते हैं। मैं 2.x से पहले के बारे में निश्चित नहीं हूं, लेकिन नहीं, इसे पूर्ण नवीनतम संस्करण का पालन करने की आवश्यकता नहीं है।
कैमरन लोवेल पामर

18

ग्रैड 2.4 के रूप में, आप gradle wrapper --gradle-version X.Xअपनी build.gradleफ़ाइल में किसी भी कार्य को जोड़े बिना, ग्रेडल आवरण के एक विशिष्ट संस्करण को कॉन्फ़िगर करने के लिए उपयोग कर सकते हैं । अगली बार जब आप रैपर का उपयोग करेंगे, तो यह मिलान करने के लिए उपयुक्त ग्रैडल वितरण को डाउनलोड करेगा।


10

यदि आप स्रोत और डॉक्स के साथ gradle डाउनलोड करना चाहते हैं, तो gradle-wrapper.properites में कॉन्फ़िगर किया गया डिफ़ॉल्ट वितरण url आपकी ज़रूरत को पूरा नहीं करेगा। यह https://services.gradle.org/distributions/gradle-2.10-bin-zip है । नहीं https://services.gradle.org/distributions/gradle-2.10-all.zip । यह पूर्ण url IDE द्वारा सुझाया गया है जैसे कि Android Studio.If यदि आप पूर्ण श्रेणी को डाउनलोड करना चाहते हैं, तो आप इस तरह के रैपर कार्य को कॉन्फ़िगर कर सकते हैं :

task wrapper(type: Wrapper) {
    gradleVersion = '2.13'
    distributionUrl = distributionUrl.replace("bin", "all")
}

1
ग्रेडेल के अधिक हालिया बिल्ड के साथ (निश्चित रूप से जो एक नहीं है) - मैन्युअल रूप से url को फिर से लिखने के बजाय, संभवतः एक ही क्लोजर में इनबिल्ट कमांड का उपयोग करना सबसे अच्छा है: वितरण टाइप = Wrapper.DistributionType.ALL
डेव बर्च

6

यह कमांडर को रैपर को अपग्रेड करने के लिए बताने के लिए उपयोग करने के लिए कमांड है जैसे कि यह पुस्तकालयों के वितरण संस्करणों को हड़प लेगा जिसमें स्रोत कोड शामिल हैं:

./gradlew wrapper --gradle-version <version> --distribution-type all

"सभी" के साथ वितरण-प्रकार को निर्दिष्ट करना आपके विकास के वातावरण द्वारा उपयोग के लिए ग्रेडल डाउनलोड स्रोत फ़ाइलों को सुनिश्चित करेगा।

पेशेवरों :

  • आईडीई के पास स्रोत कोड तक तत्काल पहुंच होगी। उदाहरण के लिए, Intellij IDEA आपको स्रोत डिस्ट्रो को शामिल करने के लिए अपनी बिल्ड स्क्रिप्ट को अपडेट करने के लिए संकेत नहीं देगा (क्योंकि यह कमांड पहले से ही था)

विपक्ष :

  • लंबा / बड़ा निर्माण प्रक्रिया है क्योंकि यह स्रोत कोड डाउनलोड कर रहा है। यह किसी बिल्ड या CI सर्वर पर समय / स्थान की बर्बादी है जहां स्रोत कोड आवश्यक नहीं है।

यदि आप किसी कमांड लाइन विकल्प के बारे में जानते हैं तो कृपया कमेंट करें या बताएं कि ग्रेडल को बिल्ड सर्वर पर स्रोत डाउनलोड न करने के लिए कोई विकल्प बताएं।


1
क्या आप सुनिश्चित हैं कि यह सेटिंग पुस्तकालयों के बारे में है? आधिकारिक डॉक्स अन्यथा कहते हैं और केवल रैपर को संदर्भित करते हैं: "रैपर द्वारा उपयोग किए जाने वाले ग्रैडल वितरण का प्रकार।" docs.gradle.org/current/dsl/…
Thorsten

2
  1. आप उन्हें एक बार जनरेट करेंगे, लेकिन अगर आपको एक नए फीचर या एक प्लगइन से कुछ चाहिए जो बदले में एक नए ग्रेडल संस्करण की आवश्यकता है, तो उन्हें अपडेट करें।

    अद्यतन करने के लिए सबसे आसान तरीका: ग्रैडल 2.2 के रूप में आप केवल पूर्ण या बाइनरी ग्रैडल वितरण को डाउनलोड और निकाल सकते हैं , और चला सकते हैं:

    $ <pathToExpandedZip>/bin/gradle wrapper
    

    किसी कार्य को परिभाषित करने की आवश्यकता नहीं है, हालाँकि आपको किसी प्रकार की build.gradleफ़ाइल की आवश्यकता है।

    यह अपडेट करने या पैदा करेगा gradlewऔर gradlew.batसाथ ही के रूप में आवरण gradle/wrapper/gradle-wrapper.propertiesऔर gradle-wrapper.jarGradle के वर्तमान संस्करण, लिपटे प्रदान करने के लिए।

  2. वे सभी रैपर का हिस्सा हैं।

  3. कुछ build.gradleफाइलें उपनिर्देशिकाओं में अन्य फाइलों या फाइलों को संदर्भित करती हैं जो उप परियोजनाएं या मॉड्यूल हैं। यह थोड़ा जटिल हो जाता है, लेकिन अगर आपके पास एक परियोजना है, तो आपको मूल रूप से एक फ़ाइल की आवश्यकता है।

  4. settings.gradleपरियोजना, मॉड्यूल और अन्य प्रकार के नाम और सेटिंग्स को gradle.propertiesसंभालता है , यदि आप चाहें तो अपनी ग्रेडल फ़ाइलों के लिए पुन: प्रयोज्य चर कॉन्फ़िगर करता है और आपको लगता है कि वे इस तरह से स्पष्ट हो जाएंगे।


2

के रूप में निर्मित में कार्य 4.8 में पदावनत है, नीचे की कोशिश करें

wrapper {
   gradleVersion = '2.0' //version required
}

और भाग खड़ा हुआ

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