2015-02-27 7 views
6

मैं कई shared-library नामित submodules के साथ एक Gradle परियोजना है शामिल हैं।Gradle - रिकर्सिवली बाहरी परियोजना और इसके उप

मेरे पास service नामक एक प्रोजेक्ट है जो shared-library के मॉड्यूल में से एक पर निर्भर करता है। उदाहरण के लिए, यह :shared-library:module1 पर निर्भर करता है। आम तौर पर, मुझे यह निर्भरता मेवेन से मिलती है।

अब मैं shared-library को संशोधित करने और निर्भर परियोजना का उपयोग कर मेरी बदलाव की जांच करना। shared-library में परिवर्तन करने के बजाय, मेवेन में तैनाती, बिल्डिंग, फिर मेरे service का पुनर्निर्माण करना, मैं serviceshared-library ग्रेडल प्रोजेक्ट पर सीधे पर निर्भर करता हूं।

तो मुझे पता चला है कि आप फाइल सिस्टम पर मनमाने ढंग से परियोजना निर्देशिका के लिए Gradle इंगित कर सकते हैं:

सेवा/settings.gradle

include "shared-library" 
project(":shared-library").projectDir = new File("/projects/shared-library") 

लेकिन जब मैं यह करते हैं, परियोजना नहीं बारे में पता है shared-library के submodules के। मैं ऐसा नहीं कर सकते:

सेवा/build.gradle

compile(
project(":shared-library:module1"), 
) 

तो मैंने कोशिश की include उन्हें सीधे ing। :shared-library:module1:shared-library:module2 पर निर्भर करता है इसलिए मैं उस के रूप में अच्छी तरह से एक में शामिल हैं:

सेवा/settings.gradle

include "shared-library" 
project(":shared-library").projectDir = new File("/projects/shared-library") 
include "shared-library:module2" 
include "shared-library:module1" 

लेकिन अब जब मैं इस चलाने का प्रयास है, यह शिकायत है कि :shared-library:module1:module2 नाम के एक प्रोजेक्ट का पता नहीं कर सकते। इसका कारण यह है अपनी निर्भरता जैसे कॉन्फ़िगर किया गया है:

साझा-पुस्तकालय/module1/build.gradle

compile(
project(":module2") 
) 

लेकिन अगर मैं बदल कि एक पूर्ण परियोजना पथ के लिए, अब shared-library अपने आप ही संकलन नहीं कर सकते :

साझा-पुस्तकालय/module1/build.gradle

compile(
project(":shared-library:module2") 
) 

tl; dr, ऐसा लगता है कि service के बीच एक मेल नहीं है shared-library सबमिशन नाम और shared-library यह कैसे करता है।

उत्तर

2

आप सही आप एक बाहरी परियोजना या यहाँ तक कि बाहरी उप आयात और उन्हें अपने मुख्य परियोजना में संदर्भित कर सकते हैं कर रहे हैं। लेकिन जैसे ही आप बाहरी संस्थाओं को संकलित करने जा रहे हैं, वे एक-दूसरे को उनके अपेक्षित नामों से हल करने में असफल हो जाएंगे।

मुझे पता है कि आप अपने मुख्य परियोजना में बाहरी परियोजनाओं नाम बदल सकते हैं, ताकि वे बाहरी परियोजनाओं के नाम से मेल। इस तरह आपकी मुख्य परियोजना और बाहरी परियोजनाएं एक ही नाम का उपयोग करेंगी।

अपने सेवा/settings.gradle में बदलें:

include "shared-library" 
project(":shared-library").projectDir = new File("/projects/shared-library") 

include "shared-library:module2" 
project('shared-library:module2').name = ':module2' 

include "shared-library:module1" 
project('shared-library:module1').name = ':module1' 

अपनी परियोजना में अब और बाह्य परियोजना हमेशा की तरह अपने मॉड्यूल का संदर्भ लें: module1 और : module2सेवा/build.gradle उपयोग में:

compile(project(":module1")) 
+0

मैं भूल गया था कि मैं इस प्रश्न पूछा! मैं अंततः इस समाधान पर आया, लेकिन फैसला किया कि मेरे स्थानीय मैवेन रेपो में स्नैपशॉट इंस्टॉल करना आसान था। लेकिन मैं अभी भी आपका जवाब स्वीकार करूंगा, क्योंकि अब यह करने का तरीका है। – SirBraneDamuj

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