2012-04-01 14 views
26

मैं वर्तमान में Flyway से वसंत निर्भरता को हटाने की प्रक्रिया में हूं। भविष्य में हालांकि उपयोगकर्ताओं के उप-समूह (जैसे जेबॉस वीएफएस समर्थन) का समर्थन करने के लिए अन्य प्रकार की निर्भरताओं की आवश्यकता हो सकती है।वैकल्पिक निर्भरताओं से निपटने के लिए सर्वोत्तम रणनीति

वैकल्पिक निर्भरताओं का समर्थन करने के लिए सबसे अच्छा तरीका (वैकल्पिक = मेवेन पीओएम में सच)? समाधान के

गुण होगा:

  • अंत उपयोगकर्ताओं के लिए उपयोग की आसानी (कम से कम काम करता है, तो निर्भरता मौजूद है कार्यक्षमता का उपयोग करने के लिए आवश्यक) डेवलपर्स के लिए
  • उपयोग की आसानी (कोड वैकल्पिक निर्भरता के साथ काम के रूप में पठनीय और संभव के रूप में सरल)
  • कोई अनावश्यक आवश्यक निर्भरता (यदि कुछ अंत उपयोगकर्ता इस कार्यक्षमता की जरूरत नहीं है, निर्भरता में खींचने के लिए कोई ज़रूरत नहीं)
+0

** अद्यतन: ** बस स्पष्ट करने के लिए, बातें मैं के बारे में अनिश्चित हैं हूँ - पोम डिजाइन - प्रतिबिंब दोनों बनाम कई मॉड्यूल बनाम बनाम ... - autodiscovery या अतिरिक्त मॉड्यूल की नहीं है अगर वे मौजूद हैं/अगर हां, कैसे - ... –

+1

अपडेट: मैं आखिरकार इस बारे में एक व्यापक ब्लॉग पोस्ट लिखने के लिए आया हूं: http://www.axelfontaine.com/2012/08/optional-dependency-strategies-for-java। एचटीएमएल –

उत्तर

11
होना चाहिए

मुझे लगता है कि मेवेन की वैकल्पिक निर्भरता कार्यक्षमता काफी सीमित है।

http://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html

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

व्यक्तिगत रूप से, यह मुझे स्पष्ट नहीं है कि यह उपयोगकर्ताओं के लिए कैसे उपयोगी है .... मुझे लगता है कि आपके पीओएम में वैकल्पिक निर्भरता दस्तावेज करते हैं जो आपके कोड पर निर्भर करता है। हालांकि सभी उपयोगकर्ता पीओएम पढ़ेंगे, वे सभी "NoClassDef Found" त्रुटि देखेंगे :-(

मेरा अंतिम अवलोकन यह है कि यह उन दुर्लभ परिदृश्यों में से एक है जहां निर्भरता प्रबंधक ivy अधिक लचीलापन प्रदान करता है। । आइवी एक अवधारणा "विन्यास" कहा जाता मॉड्यूल लेखकों निर्भरता के विभिन्न संयोजनों को इकट्ठा कर सकते हैं "के साथ वसंत" या "बिना वसंत" उदाहरण के लिए

+0

पोम और निर्भरता संस्करणों के बारे में अच्छा बिंदु। चीजों के कोड पक्ष के बारे में क्या? मॉड्यूल को विभाजित करने के लिए/NoClassDefFound/आदि से कैसे बचें? कृपया विस्तार करें। –

+0

@ मार्टिएल ने आपके लिए उपलब्ध उप-इष्टतम कार्य-आस-पास के प्रकारों की एक उत्कृष्ट रूपरेखा दी है .... मुझे नहीं लगता कि मेवेन में ऐसा करने का एक अच्छा तरीका है। कई मेवेन मॉड्यूल को तैनात करना, प्रत्येक अपने स्वयं के कस्टम पीओएम के साथ आपके उपयोगकर्ताओं के लिए सबसे अच्छा और सरल विकल्प प्रतीत होता है (लेकिन आपके लिए अधिक काम)। –

+0

डैगर 2 का का अच्छा उपयोग है। एनोटेशन कंपाइलर संकलन के दौरान उपलब्ध होने के लिए इसका उपयोग करता है लेकिन जब यह मॉड्यूल अन्य कलाकृतियों द्वारा उपयोग नहीं किया जाता है। –

1

का एक विकल्प है:।

  • परियोजना रखना एक मॉड्यूल में; और वैकल्पिक निर्भरताओं का उपयोग करें।
  • परियोजना को कई मॉड्यूल में विभाजित करें; जहां प्रत्येक मॉड्यूल में किसी भी पुस्तकालय पर एक (गैर-वैकल्पिक) निर्भरता होती है;

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

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

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

संपादित करें: यदि आप NoClassDefFoundErrors को देखने वाले उपयोगकर्ताओं के बारे में चिंतित हैं, तो यह जांचने के लिए कक्षा को हल करने के लिए कोई नुकसान नहीं होगा। उदाहरण के लिए, आप अपवाद कर सकते हैं, और उपयोगकर्ता को दस्तावेज़ीकरण के लिए इंगित करने वाला एक और सार्थक त्रुटि संदेश फेंक सकते हैं। एसएलएफ 4 जे इसका एक अच्छा उदाहरण है।

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