2012-10-23 15 views
9

मेरे पास एक प्रोजेक्ट एक्स है जो निर्भरता पदानुक्रम में बहुत अधिक विरोधाभासी निर्भरताओं को दिखाता है (जैसा कि ग्रहण की निर्भरता पदानुक्रम दृश्य में प्रदर्शित होता है)। - जो कि संघर्ष क्योंकि साझा सकर्मक निर्भरता उत्पन्न कर रहे हैंक्या विरोधाभासी ट्रांजिटिव निर्भरता मेवेन में एक गंभीर मुद्दा है?

clojure: 1.3.0 (omitted for conflict with 1.4.0) [compile] 

यह आमतौर पर एक्स द्वारा प्रयोग किया जाता लाइब्रेरी के दो कुछ अन्य पुस्तकालय के दो विभिन्न संस्करणों को निर्दिष्ट वजह से होता है: मैं जैसी चीजों के बहुत सारे देखते हैं। कुछ मामलों में संघर्ष तीसरे पक्ष के पुस्तकालयों में हैं जो मैं सीधे नियंत्रित नहीं कर सकता।

सौभाग्य से सब ठीक है और अभी ठीक चलाता है, लेकिन मुझे चिंता है कि अगर इस स्थिति में भविष्य में समस्याएं हो सकती हैं।

क्या यह एक समस्या है जिसके बारे में मुझे चिंतित होना चाहिए और यदि ऐसा है, तो मुझे इसके बारे में क्या करना चाहिए?

+1

जब से मेरा "एक्सएमएल और एक्सएमएल पार्सर एडवेंचर" मैं इन समस्याओं को कम करने की कोशिश करता हूं, यानी। प्रयास तो करो। एक लाइब्रेरी एक और एक दूसरे के एक संस्करण के आधार पर छोड़ दी जाती है जिसे तब छोड़ा जाता है क्योंकि एक और लाइब्रेरी को उसी लाइब्रेरी के एक नए संस्करण की आवश्यकता होती है, जो कि गेंदों में अच्छी तरह से निष्पादित किक की तरह लगता है। मैं आम तौर पर विवादित तृतीय पक्ष पुस्तकालयों के संस्करणों का प्रबंधन करने की कोशिश करता हूं .. मुझे यह स्वीकार करना है कि यह हमेशा काम नहीं करता है। या अच्छी तरह से काम करते हैं। – Scorpio

उत्तर

4

हां, ऐसे संघर्ष गंभीर हो सकते हैं।

आप नहीं जानते कि एक दूसरे के साथ संस्करणों की तुलना करते समय निर्भरता में असंगत परिवर्तन होता है (मामूली संस्करणों की तुलना करते समय नहीं होना चाहिए, लेकिन वास्तव में कौन जानता है?)। या शायद कुछ निर्भरता किसी अन्य निर्भरता के एक छोटी गाड़ी व्यवहार पर निर्भर करती है। क्या होगा यदि यह बग तय किया गया है? बग के आधार पर वह एक मॉड्यूल ठीक से निष्पादित करने में विफल रहेगा।

आपको विरोधाभासी निर्भरताओं को छोड़ना चाहिए (अधिकतर निम्न संस्करणों को छोड़कर)। आपके द्वारा दर्ज किए गए प्रत्येक बहिष्करण के लिए, आपको जांच करना होगा, अगर बहिष्कृत संस्करण और अब उपयोग में आने वाले संस्करण के बीच असंगत परिवर्तन हैं। यदि ऐसा है तो आपको उस मॉड्यूल पर निर्भर निर्भरताओं की जांच करनी होगी, यदि वे ऐसे परिवर्तनों से प्रभावित होते हैं।

3

अधिकांश बार यह ठीक होना चाहिए, अगर नए संस्करण को मैवेन द्वारा चुना गया है।

यदि आप प्रमुख संस्करण (पहली संख्या) में अंतर के साथ संघर्ष करते हैं या यदि नया संस्करण छोड़ा गया है तो आपको चिंता करना शुरू कर देना चाहिए। यूनिटस्टेस्ट इन समस्याओं को पकड़ने में बहुत मदद करते हैं, लेकिन अक्सर ग्रहण परियोजना और मेवेन निर्भरता सूक्ष्म तरीकों (डीबग-स्कोप, आदि) में भिन्न होती है। एकमात्र असली सुरक्षा एकीकरण परीक्षण प्रतीत होती है।

2

यह एक गंभीर समस्या हो सकता है क्योंकि आप कभी भी यह सुनिश्चित नहीं कर सकते कि वास्तव में क्या होता है, और यह बुरा है। मुझे लगता है कि मेवेन कॉन्फ़िगरेशन का उपयोग करने का बड़ा बिंदु स्पष्ट होता है कि क्या होता है और निर्भरताएं क्या होती हैं।

आप इसके बारे में क्या करना चाहिए करने के लिए के रूप में, देखने के लिए मेरे other answer - आप बाहर जाने के लिए स्पष्ट रूप से कौन-सा संस्करण उपयोग करने के लिए विन्यस्त और जिसके द्वारा उन्हें तय करने के लिए की ओर धक्का चाहिए, और maven-enforcer plugin यह एक बहुत DependencyConvergence rule के साथ आसान बना सकते हैं। यह आपको विवादित ट्रांजिटिव निर्भरताओं से बचाने के लिए है।

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