के साथ इंटरफेस और कार्यान्वयन के लिए अलग मॉड्यूल हम अपने जावा प्रोजेक्ट को मैवेनाइज करने पर काम कर रहे हैं और हम प्रत्येक मॉड्यूल के लिए इंटरफेस और कार्यान्वयन के बीच एक साफ अलगाव स्थापित करना चाहते हैं। ऐसा करने के लिए, हम प्रत्येक मॉड्यूल को दो उप-मॉड्यूल में विभाजित करना चाहते हैं, एक इंटरफेस और उनके द्वारा उपयोग की जाने वाली डेटा ऑब्जेक्ट्स और अन्य कार्यान्वयन के लिए। उदाहरण के लिए:मेवेन - स्प्रिंग
+commons
+commons-api
+commons-impl
मॉड्यूल की poms इस तरह विन्यस्त किया जाएगा कि कोई मॉड्यूल impl उप मॉड्यूल पर निर्भर करता है। इस तरह एक मॉड्यूल से कोई कोड किसी अन्य मॉड्यूल के कार्यान्वयन विवरण को "देखने" में सक्षम नहीं होगा।
हमें क्या परेशानी हो रही है, यह है कि हमारे वसंत एक्सएमएल कहां रखें। हमारी परियोजना हम स्वचालित रूप से वाइल्डकार्ड आयात का उपयोग वसंत एक्सएमएल फाइल को आयात
<import resource="classpath*:**/*-beans.xml"/>
इस तरह स्प्रिंग XMLs के स्थान वास्तव में, रनटाइम पर कोई फर्क नहीं पड़ता के रूप में सभी मॉड्यूल एक ही कक्षा लोडर में लोड करने के लिए और की तरह में , पीओएम में सख्त एक तरह निर्भरता नियम लागू नहीं होते हैं।
हालांकि, विकास के दौरान हम आईडीई चाहते हैं - हम इंटेलिज आईडीईए का उपयोग करते हैं - वसंत एक्सएमएल से संदर्भित कार्यान्वयन कक्षाओं को पहचानने के लिए। हम भी आईडीईए को अन्य मॉड्यूल में परिभाषित बीन्स को पहचानना चाहते हैं।
यदि हम वसंत एक्सएमएल को एपीआई सब-मॉड्यूल में डालते हैं - वे इम्प्ले उप-मॉड्यूल में कार्यान्वयन कक्षाओं को "देखें" नहीं देखेंगे। यदि हम उन्हें प्रत्यारोपण उप-मॉड्यूल में डालते हैं, तो उनके सेम अन्य मॉड्यूल से "देखा" नहीं जाएंगे। संभवतः आईडीईए प्रोजेक्ट को मॉड्यूल से स्प्रिंग एक्सएमएल को पहचानने के लिए कॉन्फ़िगर करना संभव है, जिस पर निर्भरता नहीं है, लेकिन हम अपने पीओएम को सभी परियोजना संरचना की जानकारी रखने के लिए पसंद करते हैं और आईडीईए परियोजना फाइलों पर भरोसा नहीं करते हैं।
हम स्प्रिंग एक्सएमएल (और शायद एक्सएमएल को भी हाइबरनेट) रखने के लिए एक तीसरा उप-मॉड्यूल बनाने पर विचार करते हैं। उदाहरण के लिए:
+commons
+commons-api
+commons-impl
+commons-config
बाहरी मॉड्यूल दोनों कॉमन्स-api और कॉमन्स-config और कॉमन्स-config दोनों कॉमन्स-api और कॉमन्स-impl पर निर्भर करेगा पर निर्भर करेगा, पर निर्भरता के साथ कॉमन्स-इम्प्ल "प्रदत्त" (संक्रमणीय संकल्प को रोकने के लिए) के रूप में चिह्नित किया गया है।
हालांकि यह एक जटिल और अजीब समाधान की तरह लगता है और हमें लगता है कि मेवेन और स्प्रिंग के साथ इंटरफ़ेस/इम्प्लाइंडेशन को अलग करने के लिए एक बेहतर तरीका होना चाहिए।
अच्छा सवाल है लेकिन अभी तक कोई जवाब नहीं है? क्या करुणा .. – cirit
@cirit सहमत - बाउंटी – drewmoore