2014-07-26 12 views
25

द्वारा प्रोजेक्ट संकलित करना वर्तमान परियोजना सीमाओं के बाहर किसी अन्य ग्रेडल प्रोजेक्ट में ग्रैडल (एंड्रॉइड स्टूडियो में) में निर्भरता निर्दिष्ट करना संभव है? इस तरह एक रिश्तेदार पथ कुछ के साथ उदाहरण के लिए: मैं एक Android आवेदन हैग्रैडल निर्भरता: सापेक्ष पथ

:

dependencies { 
    compile project('../../stdlib/dagger') 
} 

तो क्या मैं trie कुछ इस तरह है। संरचना इस तरह दिखता है:

  • MyApp (पथ है/उपयोगकर्ताओं/foo/कार्यक्षेत्र/MyApp)
    • एप्लिकेशन (पथ है/उपयोगकर्ताओं/foo/कार्यक्षेत्र/MyApp/ऐप्स)

और मैं 3 submodules युक्त एक Gradle एंड्रॉयड पुस्तकालय परियोजना है:

  • stdlib (पथ है/उपयोगकर्ताओं/foo/कार्यक्षेत्र/stdlib) +०१२३५१६४१०६१
    • चाकू (पथ है/उपयोगकर्ताओं/foo/कार्यक्षेत्र/stdlib/कटार)
    • utils (पथ है/उपयोगकर्ताओं/foo/कार्यक्षेत्र/stdlib/utils)
    • http (पथ है/उपयोगकर्ताओं/foo/कार्यक्षेत्र/stdlib/http)

क्या मैं चाहता हूँ कटार, utils, http MyApp परियोजना में मॉड्यूल संकलित करने के लिए है।

stdlib पुस्तकालय मॉड्यूल भारी विकास के अधीन हैं और MyApp बढ़ने के साथ बढ़ेगा। इसलिए जब भी मैं थोड़ा बदलाव करता हूं, मैं उन्हें एक मैवेन रिपोजिटरी में धक्का नहीं देना चाहता हूं।

तो क्या किसी अन्य तरह से अन्य ग्रेडल परियोजनाओं को जोड़ने की संभावना है? मैं एक अस्थायी समाधान की तलाश में हूं। स्रोत स्थिर होने के बाद मैं std लाइब्रेरी को मैवेन रिपोजिटरी में धक्का दूंगा।

साथ ही, वर्कअराउंड के रूप में, स्रोतसेट के साथ एक समाधान संभव होगा। मैं भी एक पुस्तकालयों MyApp जो stdlib करने के लिए एक सिमलिंक है में फ़ोल्डर बनाने के लिए विचार किया है, लेकिन मैं इसे अपेक्षा के अनुरूप काम करने के लिए नहीं मिला:

  • MyApp
      (पथ/उपयोगकर्ताओं/foo/कार्यक्षेत्र/MyApp है)
    • एप्लिकेशन (पथ है/उपयोगकर्ताओं/foo/कार्यक्षेत्र/MyApp/ऐप्स)
    • पुस्तकालयों (के लिए/उपयोगकर्ताओं/foo/कार्यक्षेत्र/stdlib सिमलिंक)
dependencies { 
     compile project(':libraries:dagger') 
    } 

कोई विचार है कि इस तरह की निर्भरता को कैसे हल किया जाए?

उत्तर

67

आप अपने मुख्य प्रोजेक्ट से 'settings.gradle' फ़ाइल का उपयोग कर बाहरी रूट प्रोजेक्ट मॉड्यूल शामिल कर सकते हैं। यह एक ग्रेडल प्रोजेक्ट भी होना चाहिए और विशिष्ट एंड्रॉइड बिल्डिंग स्थिति में, आपको प्रत्येक मॉड्यूल को "एंड्रॉइड-लाइब्रेरी" प्लगइन प्रोजेक्ट के रूप में कॉन्फ़िगर करना होगा।

उदाहरण के लिए, 'MyApp' प्रोजेक्ट में आप इस कोशिश कर सकते हैं settings.gradle:

include 'app' 
include 'dagger' 
project(':dagger').projectDir = new File('/Users/foo/workspace/stdlib/dagger') 

आपका 'MyApp' build.gradle एक रिश्तेदार पथ Gradle तरह से 'चाकू' मॉड्यूल की जरूरत प्रतिबिंबित करना चाहिए :

dependencies { 
    compile project(':dagger') 
} 

और यही वह है। आपको आवश्यक प्रत्येक बाहरी मॉड्यूल के साथ इस चरण को दोहराएं और आपके पास उचित ग्रैडल बहु-प्रोजेक्ट कॉन्फ़िगरेशन होगा।

+1

बिल्कुल सही, धन्यवाद! – sockeqwe

+0

जब मैं इसे आज़माता हूं तो मुझे 'परियोजना का मूल्यांकन करने में एक समस्या आई': खाता 'मिलता है। > अतिरिक्त गुण एक्सटेंशन पर 'compileSdkVersion' प्रॉपर्टी नहीं मिल सकती है क्योंकि यह मौजूद नहीं है ** ** खाता मेरा बाहरी प्रोजेक्ट ** –

+4

है, यह सही काम करता है, लेकिन मुझे आश्चर्य है कि 'dagger'''doesnot' क्यों शामिल है कोलन, जबकि '' 'प्रोजेक्ट (': डैगर')। प्रोजेक्टडियर के पास एक कोलन है? – howerknea

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