2010-04-02 15 views
41

के सामान्य भागों को विभाजित/कारक करने का कोई तरीका है हमारे पास कई स्वतंत्र निर्माण हैं (प्रत्येक स्वतंत्र निर्माण एक बहु-परियोजना निर्माण है)। मुख्य निर्माण स्क्रिप्ट काफी बड़े हो जाते हैं क्योंकि हमारे पास सबप्रोजेक्ट्स द्वारा पुन: उपयोग किए जाने वाले सामान्य कार्यों का एक सेट होता है और साथ ही साथ इंडिपेंडेंट बिल्डों के बीच बहुत अधिक दोहराव होता है। क्या हम देख रहे है:क्या ग्रैडल बिल्ड

  1. एक तरह से छोटी फ़ाइलों में
  2. एक तरह से अन्य स्वतंत्र में निर्माण के कुछ भागों का पुन: उपयोग करने के लिए मुख्य निर्माण फ़ाइल विभाजित करने के लिए बनाता है

क्या है Gradle में प्राप्त करने के लिए सबसे अच्छा तरीका है?

उत्तर

41

ग्रैडल 0.9 आपको किसी अन्य निर्माण स्क्रिप्ट से एक बिल्ड स्क्रिप्ट आयात करने की अनुमति देता है। एक नज़र डालें: Configuring the project using an external build script। असल में यह apply from: 'other.gradle' है।

उपयोगकर्ता मार्गदर्शिका का एक उल्लेख यह नहीं है कि 'से' पैरामीटर एक यूआरएल हो सकता है, ताकि आप अपनी साझा स्क्रिप्ट HTTP के माध्यम से कहीं भी उपलब्ध करा सकें (जैसे आपका सबवर्जन रिपोजिटरी), और उन्हें कई बिल्डों से आयात करें।

+0

लिंक के लिए धन्यवाद। क्या आपको लगता है कि 0.8 उस सुविधा का समर्थन करता है? –

+0

नहीं, यह 0.9 –

+0

grrrr में एक नई सुविधा है, लिंक टूटा हुआ था, अब अपने आप को खोदने की जरूरत है। –

25

जो समाधान मैंने पाया है, वह आपके other.gradle फ़ाइल में मौजूद चीज़ों का मानचित्रण करने का तात्पर्य है।

def getVersionName = { -> 
    def stdout = new ByteArrayOutputStream() 
    exec { 
     commandLine 'git', 'describe', '--tags' 
     standardOutput = stdout 
    } 
    return stdout.toString().trim() 
} 
ext{ 
    VERConsts = [:] 
    VERConsts['NAME'] = getVersionName() 
    VERConsts['NAME_CALL'] = getVersionName 
} 

फिर, अपने build.gradle फ़ाइल में:

apply from: 'other.gradle' 
// ... 
android { 
    defaultConfig { 
     versionName VERConsts['NAME_CALL']() 
     // or 
     versionName VERConsts['NAME'] 
    } 
} 

फिर, versionName कॉल परिणाम होगा।

नोट्स:

  • VERConsts['NAME'] = getVersionName()getVersionName() फोन और उसके परिणाम संग्रहीत करेगा। इसे अपनी स्क्रिप्ट में प्रयोग करना उदा। versionName VERConsts['NAME'] तब संग्रहीत मूल्य असाइन करेगा।
  • VERConsts['NAME_CALL'] इसके बजाय फ़ंक्शन का संदर्भ संग्रहीत करेगा। अपनी स्क्रिप्ट में VERConsts['NAME_CALL']() का उपयोग वास्तव में फ़ंक्शन को कॉल करें और अपने चर

एक ही मूल्य में पूर्व परिणाम होगा स्क्रिप्ट जबकि बाद विभिन्न मूल्यों में हो सकता है भर में निर्धारित किये जाने से (उदाहरण के लिए किसी को एक और धक्का अगर करने के लिए परिणाम प्रदान करेंगे संस्करण जबकि आपकी स्क्रिप्ट चल रही है)।

+0

बनाता है मुझे वास्तव में परियोजनाओं के बीच बिल्ड स्क्रिप्ट सहायक विधियों को साझा करने के लिए अन्य उत्तर की तुलना में यह अधिक उपयोगी लगता है। –

+0

यह उत्तर मेरे लिए सबसे उपयोगी था। धन्यवाद! –

+0

क्या आप गैर-एंड्रॉइड उदाहरण दे सकते हैं? वर्जननाम VERConsts ['NAME_CALL']() क्या है? स्वच्छ जावा ग्रेडल परियोजना में इसे कैसे चलाया जाए? – user3871754

संबंधित मुद्दे