2013-02-16 18 views
8

मैं निम्नलिखितOSGi बंडल बनाम जार निर्भरता

<dependency> 
     <groupId>com.myspace.order</groupId> 
     <artifactId>dal</artifactId> 
     <version>1.0.0-SNAPSHOT</version> 
    </dependency> 

और

<dependency> 
     <groupId>com.myspace.order</groupId> 
     <artifactId>dal</artifactId> 
     <version>1.0.0-SNAPSHOT</version> 
     <type>bundle</type> 
    </dependency> 

दाल विरूपण साक्ष्य ही बीच के अंतर को समझने की कोशिश कर रहा हूँ पैकेजिंग के रूप में बंडल के रूप में निर्दिष्ट किया है:

<packaging>bundle</packaging> 

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

उत्तर

11

जब आप मेवेन में निर्भरता घोषित करते हैं, तो आप केवल एक सामान्य जार पर निर्भर हो सकते हैं, न कि बंडल, क्योंकि मैवेन ओएसजीआई पर्यावरण प्रतिबंधों को नहीं पहचानता है।

इस सवाल देखें: (! लेकिन चाहिए)

Why can't maven find an osgi bundle dependency?

समय आप अपनी परियोजना संकलन, आपको चिंता करने की जरूरत नहीं है OSGi पर्यावरण के बारे में अभी तक ... उदाहरण के लिए, यह अगर आप उस बंडल द्वारा निर्यात नहीं किए गए पैकेजों का उपयोग करने का प्रयास करते हैं, तो आप शिकायत नहीं करते हैं ....

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

ध्यान में रखते हुए कि 'दाल' पहले से ही एक बंडल प्रतीत होता है, आपको बस अपने बंडल और 'दाल' को एक साथ तैनात करना होगा और सब कुछ ठीक काम करेगा।

हालांकि, अगर आप गलती से 'दाल' के एक निजी पैकेज पर निर्भरता जोड़ा है, हालांकि Maven खुशी से आप के लिए यह संकलन होगा, जब आप OSGi में यह फेंका आप एक बुरा तारों अपवाद द्वारा स्वागत किया जाएगा :)

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

What is the meaning of type "bundle" in a maven dependency?

+0

"उदाहरण के लिए, यदि आप बंडल आप पर निर्भर करता है कर रहे हैं द्वारा निर्यात नहीं संकुल इस्तेमाल करने की कोशिश की शिकायत नहीं करेगा:

लेकिन वैसे भी, अगर आप कुछ और अधिक जानकारी चाहते हैं, इस सवाल का चेक .... " क्या इसका मतलब है कि ओएसजीआई निर्भरता को रनटाइम पर लागू किया गया है (और पता चला है)? मैं सोच रहा था कि संकलन समय पर निर्यात-पैकेज सत्यापित किया गया था। – Sudoer

+1

जब आप ओएसजीआई कंटेनर में बंडल स्थापित करते हैं तो निर्भरता को हल किया जाएगा। चूंकि ओएसजीआई एक गतिशील वातावरण है, आप किसी भी समय एक बंडल स्थापित कर सकते हैं ... यदि बंडल रिजोल्यूड राज्य में जाता है, तो इसे प्रारंभ किया जा सकता है। दूसरे शब्दों में, स्थापना गतिशील संकलन का एक प्रकार है ... यदि बंडल पास हो जाता है, तो यह गारंटी है कि स्थापना के समय, सभी आयात संतुष्ट थे, इसलिए बंडल शुरू हो सकता है। – Renato

+1

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

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