2012-03-01 16 views
6

मान लीजिए कि आपके पास ऐसे वेब ऐप्स हैं जो स्प्रिंग जैसे सामान्य पुस्तकालय के विभिन्न संस्करणों का उपयोग करते हैं। मेरे पास एक व्यवसाय तर्क पुस्तकालय है जो इस सामान्य पुस्तकालय का भी उपयोग करता है। अब तक कोई समस्या नहीं है, लेकिन जिस तरह से सामान्य पुस्तकालय के एक संस्करण ने एक अमूर्त वर्ग परिभाषा को बदल दिया और व्यापार तर्क पुस्तकालय तोड़ दिया।मेवेन में असंगत निर्भरताओं का पता लगाना?

तो मैं एक संगत संस्करण तालिका कि इस तरह दिखता है के साथ खत्म हो ...

business-lib-version | common-lib-version 
     1.0   |  1.0 
     1.1   |  2.0 

मैं व्यापार lib संस्करण लेने आवेदन में आम lib संस्करण ड्राइव करने के लिए नहीं करना चाहती। इसके बजाय मैं आम lib के आधार पर व्यापार lib का सही संस्करण चुनना चाहता हूं। मुझे पूरा यकीन है कि यह संभव नहीं है इसलिए मैं मुख्य प्रश्न पर जाता हूं।

क्या संस्करण असंगतताओं का पता लगाने का कोई शानदार तरीका है? आदर्श रूप में मैं एक बिल्ड टाइम समाधान चाहता हूं, अन्यथा शुरुआती रन-टाइम समाधान ठीक रहेगा।

मैंने मेवेन में संस्करण श्रेणियों का उपयोग करने का प्रयास किया है, लेकिन इसने हमें कई समस्याओं का कारण बना दिया है कि कैसे मैवेन गैर-मानक संस्करण स्वरूपों में संस्करणों का प्रकार बनाते हैं और हमारे पास निर्माण समय पर सही ढंग से श्रेणियों को हल करने में कई समस्याएं भी होती हैं।

+0

"असंगतता" से आप बस अलग-अलग संस्करणों या वास्तविक टूटने का मतलब रखते हैं? –

+0

@ डेव न्यूटन: इस बिंदु पर या तो दोनों या दोनों। मैं बस कम से कम suprises के समाधान की तलाश में हूँ। –

उत्तर

4

Ning dependency-versions-check मेवेन प्लगइन आपके निर्माण में असफल हो जाएगा यदि निर्भरता संस्करण किसी अन्य निर्भरता से गलती से आयोजित किया गया हो। यह आपके लिए इसे ठीक नहीं करेगा, लेकिन यह आपको कम से कम बताएगा!

+0

यहां समस्या यह है कि इसमें उपभोक्ता ऐप की उस प्लगइन को शामिल करने की आवश्यकता है। शायद इसे एक मानक सीआई पर्यावरण निर्माण में जोड़ा जा सकता है। मुझे डर है कि यह अन्य निर्भरताओं को तोड़ सकता है जो एक नए संस्करण का उपयोग करने के ठीक हैं। हालांकि मुझे अभी भी दस्तावेज़ों में पढ़ने के लिए बहुत कुछ है। –

+0

हम इसे "बेस" पोम में शामिल करते हैं, जिसमें हमारी सभी परियोजनाएं प्राप्त होती हैं, इसलिए सभी परियोजनाएं इसे प्राप्त करती हैं (और अन्य कॉन्फ़िगरेशन भी) –

+0

वर्जनिंग के लिए, यह मानता है कि आपके पास वास्तव में एक समझदार संस्करण नीति है जिसका आप अनुसरण करते हैं (उदाहरण के लिए प्रमुख। मामूली.patch) और इसलिए यह आपको 1.7.2 से 1.7.1 तक वापस जाने देगा, लेकिन 1.6.9 पर वापस नहीं –

0

मुझे यह अच्छी तरह से करने के किसी भी तरीके से नहीं पता - या तो रनटाइम पर या यहां तक ​​कि निर्माण समय पर भी। मैनिफ़ेस्ट या जार फ़ाइल नामों की जांच किए बिना पैकेज के संस्करण को निर्धारित करने के लिए कोई मानक तंत्र नहीं है - जो कि सबसे अच्छा हैक होगा। हो सकता है कि एक मैवेन प्लगइन है जिसे मैं नहीं जानता कि यह स्वचालित रूप से करता है लेकिन मुझे एक के बारे में पता नहीं है।

हम केवल हमारे कोड के लिए आवश्यक पुस्तकालयों के संस्करणों को ठीक करते हैं और अपग्रेड करते हैं जब हमें या तो आवश्यकता होती है क्योंकि हमें अतिरिक्त कार्यक्षमता या अन्य निर्भरता की आवश्यकता होती है। आमतौर पर हम अन्य निर्भरता से आगे हैं तो हम pom.xml में हमारी निर्भरता परिभाषाओं में एक ठेठ बहिष्कार मार्कर डाल:

<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring</artifactId> 
    <version>${spring-version}</version> 
    <exclusions> 
     <exclusion> 
      <groupId>commons-logging</groupId> 
      <artifactId>commons-logging</artifactId> 
     </exclusion> 

यह हमें commons-logging के बाद में संस्करण पर निर्भर करने के लिए अनुमति देता है।

यदि, हालांकि, आप लाइब्रेरी का 1.0 उपयोग कर रहे हैं, लेकिन आपकी निर्भरता में से एक 2.0 का उपयोग कर रहा है तो आपको exclusion आज़माएं और देखें कि निर्भरता 1.0 के साथ चलती है या यहां तक ​​कि संकलन भी होती है। यदि नहीं तो आपको 2.0 के साथ काम करने या निर्भरता को डाउनग्रेड करने के लिए या तो अपने कोड को अपग्रेड करने के लिए मजबूर होना होगा।

क्षमा करें कि मैं और अधिक सहायता नहीं कर सका।

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