Bundle-ClassPath
हमारे बंडल में निर्भरताओं को शामिल करने के लिए है, ताकि हमारे बंडल को स्टैंडअलोन पर तैनात किया जा सके।
चलो एक उदाहरण लें। मान लीजिए कि मेरे बंडल में कोड लाइब्रेरी का उपयोग करता है, उदा। Google गुवा मेरे पास बंडल पैकेजिंग के लिए दो विकल्प हैं:
बस मेरे बंडल को इसके अंदर केवल अपने कोड के साथ बनाएं। बंडल में अब Import-Package
बयान होंगे जो गुवा पर निर्भरता घोषित करेंगे, और कोई भी जो मेरे आवेदन में अपने बंडल को तैनात करना चाहता है उसे भी अमरूद को तैनात करना होगा।
वैकल्पिक रूप से मैं अपने बंडल के अंदर अमरूद की एक प्रति शामिल कर सकता हूं और इसे अपने Bundle-ClassPath
से संदर्भित कर सकता हूं। जो भी मेरा बंडल तैनात करता है वह सिर्फ मेरे बंडल को तैनात कर सकता है, और इसके बारे में चिंता करने की आवश्यकता नहीं है कि गुवा को कहां से प्राप्त किया जाए। वास्तव में, मेरे बंडल के अंदर अमरूद का अस्तित्व एक कार्यान्वयन विस्तार है, और नियोक्ता को यह भी जानने की आवश्यकता नहीं है कि मैं इसका उपयोग कर रहा हूं।
इन दो विकल्पों के बीच चुनाव एक व्यापार-बंद है। विकल्प 2 का लाभ यह है कि मेरा बंडल तैनात करना आसान है क्योंकि यह स्टैंडअलोन है - इसके लिए आवश्यक सब कुछ ठीक है। दूसरी तरफ, मेरा बंडल जितना बड़ा होना चाहिए उससे बड़ा है, जो कि कई अन्य बंडल भी गुवा की अपनी प्रतिलिपि एम्बेड करते हैं, जो एक समस्या बन सकती है।
विकल्प 2 के साथ एक और गंभीर समस्या यह है कि लाइब्रेरी की सभी निर्भरता अब मेरी निर्भरता भी बन गई है। दरअसल अमरूद जावा लाइब्रेरी का एक दुर्लभ उदाहरण है जिसमें इसकी कोई निर्भरता नहीं है ... लेकिन कई अन्य जावा पुस्तकालय संक्रमणकारी निर्भरताओं के एक बड़े पेड़ में खींचते हैं। यदि आप इस दृष्टिकोण का उपयोग करते हैं, तो कहें, हाइबरनेट करें तो अपने स्वयं के बंडल में उस बड़े निर्भरता सेट भी होगा। यह बहुत बदसूरत हो जाता है, बहुत जल्दी।
तो, आपको सावधान रहना चाहिए कि Bundle-ClassPath
/Embed-Dependency
पर अधिक उपयोग न करें। आपको केवल इसका उपयोग करने पर विचार करना चाहिए यदि निर्भरता (ए) छोटी है, और कोई संक्रमणीय निर्भरता नहीं है, और (बी) आपका बंडल लाइब्रेरी का आंतरिक कार्यान्वयन विवरण के रूप में उपयोग करता है, यानी यह आपके सार्वजनिक एपीआई का हिस्सा नहीं है।
अद्यतन
मैं निर्यात के बारे में अपने दूसरे सवाल का जवाब देने भूल गया। जवाब नहीं है, आपके Bundle-ClassPath
पर रखे गए किसी भी "बंडल" के निर्यात आपके स्वयं के बंडल का निर्यात नहीं बनेंगे। असल में जिन जारों को हम Bundle-ClassPath
पर डालते हैं उन्हें बंडलों के रूप में नहीं माना जाता है, वे सिर्फ जार हैं।
आप अपने Bundle-ClassPath
पर जेएआर के भीतर आने वाले पैकेज निर्यात करना चुन सकते हैं लेकिन आपको इसे अपने स्वयं के बंडल के MANIFEST.MF में करना होगा।
स्रोत
2013-06-05 11:43:59
धन्यवाद एक टन!सिर्फ स्पष्टीकरण मैं देख रहा था :-) – Parag