निर्भरता संस्करण संघर्ष से बचें?


10

कोई भी जावा प्रोजेक्ट जो मेरे जार का उपयोग करता है, लगभग निश्चित रूप से दूसरे जार पर एक अतिरिक्त निर्भरता होगी, जिसमें मेरे जार पर निर्भरता भी शामिल है।

समस्या यह है, कि अन्य जार के कई संस्करण हैं।

मैं किसी भी मुद्दे से कैसे बच सकता हूं जो इस स्थिति में उत्पन्न हो सकता है कि आपकी परियोजना का दूसरा जार का संस्करण मेरे जार के दूसरे जार के संस्करण से अलग है?

मैं अपने उपयोगकर्ताओं को अपने जार को जोड़ने के लिए कुछ फैंसी क्लासलोडिंग ट्रिक करने का अतिरिक्त झंझट नहीं चाहता।

क्या मुझे उस सामान्य निर्भरता के हर संभव संस्करण के लिए, बस अपने जार के विभिन्न संस्करणों का एक गुच्छा बनाना चाहिए? और फिर आप बस मेरे जार के संस्करण को चुनें जो पहले से ही होने वाले 2 जार के समान संस्करण का उपयोग करता है?

क्या इसे संभालने का एक स्मार्ट तरीका है, और लोगों को बिना किसी टकराव के मेरे जार का उपयोग करना आसान बनाता है?

जवाबों:


10

यह आपकी समस्या नहीं है। इसे हल करना आपके अंतिम उपयोगकर्ता पर निर्भर है। यह सिर्फ तृतीय-पक्ष निर्भरता का उपयोग करने के क्षेत्र के साथ आता है, और मुझे निर्भरता से अधिक बार निर्भरता संघर्षों को हल करना होगा। आप हर परियोजना के विशिष्ट निर्भरता संघर्ष को समायोजित करने की उम्मीद नहीं कर सकते।

आपके सॉफ़्टवेयर को आपकी निर्भरता के नवीनतम संस्करणों के साथ सही ढंग से काम करना चाहिए। जब तक निर्भरता हर रिलीज़ पर उनके इंटरफ़ेस को बदल नहीं रही है, तब तक आपके पास संगतता की एक सीमा होनी चाहिए (जैसे कि आपका सॉफ़्टवेयर रेंज के सभी संस्करणों के लिए काम करता है [2.0.0, 3.0.0))। जब तक आप सॉफ्टवेयर का रखरखाव कर रहे हैं, तब तक आपको इसे अपने सभी आश्रितों के नवीनतम संस्करण के साथ संगत रखने का प्रयास करना चाहिए।

उस ने कहा, यहां कुछ चीजें हैं जो मुझे एक डेवलपर के रूप में आपके सॉफ़्टवेयर का उपयोग करके आपके निर्भरता के विभिन्न संस्करण के साथ उपयोगी लगेगा।

  • यदि आपकी परियोजना और किसी अन्य परियोजना के बीच एकीकरण तंग है, तो आपके दस्तावेज़ में संगतता चार्ट होना मददगार है। भले ही, आपको अपने प्रलेखन में निर्भरता के विशिष्ट संस्करणों के साथ किसी भी ज्ञात मुद्दे का उल्लेख करना चाहिए। अन्यथा डेवलपर्स को परीक्षण और त्रुटि के अनुसार एक संगत संस्करण खोजना होगा।
  • एक इंटरफेस के माध्यम से निर्भरता के साथ सहयोग का सार है, और अपने सॉफ्टवेयर डिजाइन ताकि कार्यान्वयन निर्भरता इंजेक्शन के साथ प्रतिस्थापित किया जा सकता है। यह आपको परेशान किए बिना पुस्तकालय के संस्करण x के साथ अपने एकीकरण का विकल्प देने के लिए मुझे अंतिम उपयोगकर्ता के रूप में अनुमति देता है।
  • एक सार्वजनिक समस्या ट्रैकर रखें ताकि आपके उपयोगकर्ता आपसे सामान्य निर्भरता के कुछ संस्करणों का समर्थन करने के लिए कह सकें। यदि आपको लगता है कि कई उपयोगकर्ता निर्भरता के असंगत संस्करण के लिए समर्थन चाहते हैं, तो आप दोनों के लिए संस्करण प्रकाशित कर सकते हैं। इस मावेन उदाहरण को देखें जहां वे कई प्लेटफार्मों को लक्षित करते हैं - एक निर्भरता के विभिन्न संस्करणों के लिए समर्थन समान होना चाहिए।

क्या Java के पास असेंबली बाइंडिंग अप्रत्यक्ष App.config सेटिंग जैसा कुछ है। .NET में जहाँ आप "निर्भरता Foo v3.0.2 का अनुरोध करने वाले पुस्तकालयों को निर्दिष्ट कर सकते हैं, वास्तव में Foo v3.0.5 का उपयोग करना चाहिए और यह v3.0.2 की तरह ही नाटक करना चाहिए"? मैंने 11 साल से अधिक समय में जावा नहीं किया है इसलिए मेरी स्मृति यह कैसे संभालती है, यह सिर्फ हो गया है।
जॉन ज़ब्रोस्की
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.