2012-06-27 14 views
5

आप जेएक्सबी को अपने जावा एप्लिकेशन की निर्भरता के रूप में क्यों घोषित करना चाहते हैं क्योंकि यह जेआरई के साथ भेज दिया गया है और आपके एप्लिकेशन क्लासपाथ में ओवरराइड नहीं किया जा सकता है?एक निर्भरता के रूप में जेएक्सबी घोषित करना। क्यूं कर?

उदाहरण के रूप में jersey-json का उपयोग करके, उनके पीओएम फ़ाइल में वे सटीक संस्करण को निर्दिष्ट किए बिना जैक्सब-इंप्लो पर निर्भरता घोषित करते हैं। ऐसा करके वे क्या हासिल कर रहे हैं?

और जब भी मैं अपनी पीओएम फ़ाइल में jersey-json पर निर्भरता जोड़ता हूं, तो मैं अपने क्लासपाथ में jaxb-api.jar और jaxb-impl.jar होने का अंत करता हूं। मैं ऐसा क्यों करना चाहूंगा? अगर मैं फ़ाइलों को अनुमोदित पुस्तकालय निर्देशिका में नहीं डालता तो लोड हो रहा है, तो डिफ़ॉल्ट JVM कार्यान्वयन नहीं है?

+0

सटीक स्थान दे सकते हैं जहां आपको पोम इत्यादि के बारे में जानकारी मिली? – khmarbaise

+0

जर्सी-जेसन की पोम फ़ाइल के लिए एक लिंक जोड़ा गया। – Muton

उत्तर

0

जर्सी लोगों की तरह यह आवाज उनकी निर्भरता को गलत परिभाषित करती है। यदि पर्यावरण द्वारा निर्भरता प्रदान की जाती है जहां आप इसे चलाते हैं तो इसे "प्रदान" के दायरे से परिभाषित किया जाना चाहिए।

+1

लेकिन इस मामले में आपके पास "प्रदत्त" क्यों होगा, क्योंकि यह खुद rt.jar में बंडल है? – Muton

+0

नहीं। कारण आपको संकलन निर्भरता के रूप में इसकी आवश्यकता है। लेकिन अगर आप हमेशा जावा 1.6 का उपयोग करना सुनिश्चित करते हैं तो आपको वास्तव में इसकी आवश्यकता नहीं है। – khmarbaise

1

मैं जुड़ा हुआ पोम में दिखाई दे रही है:

<dependency> 
     <groupId>com.sun.xml.bind</groupId> 
     <artifactId>jaxb-impl</artifactId> 
    </dependency> 

लेकिन वहाँ भी एक माता पिता पोम है, तो आप उस निशान का पालन करने के लिए, को देखने के लिए चाहते हो सकता है अगर एक वास्तविक संस्करण और/या गुंजाइश निर्दिष्ट किया गया था वहां (और प्रचारित)।

लेकिन यदि यह नहीं है, तो मुझे लगता है कि जर्सी टीम का मानना ​​है कि जेएक्सबी 2 एपीआई पर्याप्त परिपक्व है ताकि वे जेएक्सबी कार्यान्वयन पर ढीली निर्भरता निर्दिष्ट कर सकें।

जेएआरबी इंजेक्शन के एक विशेष कार्यान्वयन के साथ जेआरई जहाज, जो सबसे लंबे समय तक जेएक्सबी आरआई 2.1.7 के बराबर था। लेकिन साथ ही, आपके ऐप्स में, आपकी पसंद के किसी अन्य कार्यान्वयन के लिए आसानी से स्वैप करने के लिए एक तंत्र है।

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

फिर भी, कुछ कारण जो आपको एक अलग जेएक्सबी कार्यान्वयन चाहते हैं, में शामिल हैं: बाएं ओवर बग (एक नई रिलीज में संबोधित); JAXB 2.2.x (जो जेआरई के नवीनतम संस्करण में आता है) जैसी एक नई जेएक्सबी एपीआई की आवश्यकता है; कुल मिलाकर एक अलग कार्यान्वयन उपयोग करने के लिए, आदि (क्योंकि यह एक बेहतर API और/या अपने विशेष उपयोग के लिए प्रदर्शन करने के लिए होता है) चाहते हैं ...

तो अपने जर्सी सवाल करने के लिए वापस

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

+0

माता-पिता में दायरा परिभाषित नहीं किया गया है जिसके परिणामस्वरूप आपकी परियोजना में निर्भरता हो रही है। – khmarbaise

+1

स्पष्टीकरण के लिए धन्यवाद लेकिन यह अभी भी मेरे लिए पूरी तरह से स्पष्ट नहीं करता है। मेरी समझ में आप अपने क्लासपाथ में एक और संस्करण जोड़ कर जेआरई के साथ बंडल किए गए संस्करण को आसानी से ओवरराइड नहीं कर सकते हैं क्योंकि इसके लिए आपको अनुमोदित मानकों को ओवरराइड तंत्र (http://docs.oracle.com/javase/7/docs/technotes) का उपयोग करने की आवश्यकता है/गाइड/मानक)। या क्या मैं पूरी तरह से यहां गलत हूं? मैं समझता हूं कि जर्सी प्रोजेक्ट के लिए जेएक्सबी का सटीक संस्करण बहुत अंतर बनाता है लेकिन मुझे समझ में नहीं आता कि वे इसे अपनी पोम फ़ाइल में कैसे प्रबंधित कर सकते हैं और वे इसे संकलन समय निर्भरता के रूप में क्यों परिभाषित करते हैं। – Muton

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