2010-03-09 9 views
7

एक निर्भरता प्रबंधन उपकरण (उदाहरण के लिए, मैवेन 2) का उपयोग मानते हुए, एक परियोजना के भीतर एक प्रमुख निर्भरता उन्नयन को संभालने पर कुछ सर्वोत्तम प्रथाओं की तलाश में है।प्रमुख ढांचे/निर्भरता उन्नयन को कैसे संभालें?

  • कैसे अप-टू-डेट (जैसे, वसंत 1.2.x 2.5.x करने के लिए) एक विरासत आवेदन प्राप्त करने के लिए
  • क्या प्रथाओं में डाल दिया जा सकता है:

    विशेष रूप से, मैं में दिलचस्पी रखता हूँ अनुप्रयोगों को कुछ हद तक अद्यतित रखने के लिए जगह

आपके अपने अनुभव या कोई लेख/कागजात जो आप पाए गए हैं/उपयोगी हैं, उनका स्वागत है।

संपादित करें: एक निर्भरता संस्करण संख्या अद्यतन करना मामूली है। मैं इस बात की अधिक तलाश कर रहा हूं कि आप निर्भरताओं में परिवर्तनों (बहिष्करण, हटाने, पैरामीटर/रिटर्न वैल्यू आदि में प्रकारों में परिवर्तनों के आधार पर) को बदलने के लिए आवश्यक परिवर्तनों को कैसे निपटने के बारे में सोच रहे हैं।)। और यदि भविष्य में इन परिवर्तनों को कम करने का कोई अच्छा तरीका है, तो अपनी निर्भरता को अद्यतित रखने के लिए आपको परिवर्तनों के शीर्ष पर बने रहने और सुविधा को और अधिक सुरक्षित बनाने के लिए बर्बाद होने में बहुत समय बर्बाद करने की अनुमति देता है एक्स 2.1 '।

उत्तर

1

मेरे अनुभव में, निर्भरता के स्वामित्व वाली आवश्यक कार्यक्षमता के कारण निर्भरता उन्नयन लागू किया गया है, निर्भरता में एक बग के लिए एक फिक्स के रूप में जो सीधे आपके कोड को प्रभावित करता है, एक नई जावा रिलीज का समर्थन करने के लिए, या अपना कोड रखने के लिए एक विशेष मानक के अनुरूप (सुरक्षा को प्रभावित करने वाली निर्भरताओं के संबंध में)। अपने कोड आवश्यकता के इन क्षेत्रों में से एक में गिर नहीं करता है, मैं उन्हें करने की तारीख रखने परेशान नहीं हैं, लेकिन इसके बजाय केवल रिहाई को रिहा करने से अद्यतन करने के लिए वास्तव में अपने आवेदन में बग प्रस्तुत कर सकते हैं के रूप में उन्हें आवश्यक के रूप में अद्यतन करें।

मैं हमेशा पाया है कि सबसे अच्छा अभ्यास, चक्र के लिए आपके आवेदन पर उत्पादन खत्म कर एक स्थिर निर्माण के रूप में यह जारी है, और मैन्युअल रूप से अगले विकास यात्रा में अपनी निर्भरता को अद्यतन करने के साथ शुरू होता है। अपने मूल पीओएम में अपने संस्करणों को केंद्रीकृत करने के परिणामस्वरूप न्यूनतम निर्भरता संस्करण संशोधन और विस्तारित विस्तारशीलता होगी। आप कर रहे हैं मान लिया जाये कि Maven का उपयोग कर:

<dependency> 
    <groupId>your.dep.group</groupId> 
    <artifactId>your-artifact-id</artifactId> 
    <version>${desiredVersion}</version> 
</dependency> 
+0

मैं समझता हूं कि आप क्या कह रहे हैं, लेकिन आप इस सवाल पर चमक रहे हैं। पूरी तरह से। मान लीजिए कि आप उन स्थितियों में से एक हैं, कुछ सर्वोत्तम प्रथाएं क्या हैं? (या क्या हर कोई सिर्फ ग्रहण (और शायद m2eclipse) को बताता है कि कक्षाएं अब मौजूद नहीं हैं, बहिष्कृत हो गई हैं, आदि ... और वहां से चले गए हैं?) मेरे प्रश्न के दूसरे भाग के लिए, अपनी निर्भरताओं को कुछ हद तक ऊपर रखना आज तक आपके द्वारा सूचीबद्ध सूची के कारणों के लिए भविष्य के उन्नयन में मदद मिल सकती है (या अनावश्यक यदि आप पहले से ही 'सिक्योरर एक्स 2.0' सुविधा वाले संस्करण में अपग्रेड कर चुके हैं और किसी भी बाधा को कम कर चुके हैं)। –

+0

मैं सर्वोत्तम अभ्यास के बारे में क्या कहने की कोशिश कर रहा हूं वह है: अपनी निर्भरताओं को केवल तभी अपडेट करें जब यह स्पष्ट हो जाए कि आप जिस निर्भरता संस्करण का उपयोग कर रहे हैं, वह इसे काट नहीं रहा है। अपने आईडीई को बताएं कि कुछ कब बहिष्कृत है या अब मौजूद नहीं है, यही वह है जो इसके लिए है। मुझे विश्वास नहीं है कि अद्यतित रहने से भविष्य में व्यापक कोड परिवर्तनों को रोका जा सकेगा। यह आपकी निर्भरताओं के विकास का ज्ञान मानता है। आप बस अपनी निर्भरताओं पर परीक्षण, परीक्षण, परीक्षण और अपनी निर्भरताओं को कम कर सकते हैं। – Joel

1

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

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

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

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

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

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