2010-08-19 12 views
13

मैंने ग्रहण प्लग-इन प्रोजेक्ट विज़ार्ड (ग्रहण हेलीओस का उपयोग करके) दो ओएसजीआई बंडल ए और बी बनाया है।अन्य ओजीआई बंडल में संसाधनों का उपयोग करें?

बंडल बी की मैनिफेस्ट फ़ाइल में मैंने बंडल ए को निर्भरता के रूप में जोड़ा है। इसके अलावा मैंने ए में पैकेज निर्यात किए हैं, इसलिए वे बी के लिए दृश्यमान हैं। मेरे पास बंडल ए में एक प्रोप्रर्टीज फ़ाइल भी है। मैं बंडल बी के लिए दृश्यमान बनाना चाहता हूं। बिल्ड में। बंडल ए में बिल्ड.प्रोपर्टीज़ फलक में निर्दिष्ट किया गया है:

source.. = src/ 
bin.includes = META-INF/,\ 
       .,\ 
       bundle_A.properties 

बंडल बीआई कोशिश में अभी सेवा का उपयोग .properties फ़ाइल को लोड करने:

लेकिन यह एक nullpointer अपवाद (फ़ाइल classpath पर नहीं पाया जाता) देता है।

क्या बंडल ए से संसाधन निर्यात करना संभव है (जैसे कि जब आप पैकेज निर्यात करते हैं) या किसी भी तरह से बी से फ़ाइल में किसी अन्य तरीके से फ़ाइल एक्सेस करना (बंडल बी से बंडल ए के लिए क्लासलोडर तक पहुंचना)?

उत्तर

3

आप एक ग्रहण प्लग में आप की तरह कुछ की कोशिश कर सकते लिख रहे हैं। आप किसी भी बंडल से किसी संसाधन को लोड करने के लिए इसका उपयोग कर सकते हैं। यदि आप बंडल के अंदर संसाधन के सही पथ को नहीं जानते हैं तो findEntries() और getEntryPaths() विधियों को भी देखें।

ऐसा करने के लिए बंडल के क्लासलोडर को पकड़ने की आवश्यकता नहीं है।

+0

यह हेलियोस के भीतर स्पष्ट रूप से बहिष्कृत है। – JRSofty

2

क्या आपने ए के एपीआई को बंडल करने के लिए एक विधि जोड़ने पर विचार किया है जो संसाधन लोड करता है और देता है?

कई लोग इस एक बेहतर डिजाइन पर विचार हो सकता है क्योंकि यह नाम या संसाधन बंडल ए के ग्राहकों को तोड़ने के बिना परिवर्तन के

+0

जब मैं प्लगइन-परीक्षण चलाता हूं तो वह दृष्टिकोण काम करता है। लेकिन जब मैं लॉन्च कॉन्फ़िगरेशन के माध्यम से बंडल चलाता हूं तो .properties फ़ाइल नहीं मिल सकती है। प्लूइन-टेस्ट और ओएसजीआई रन कॉन्फ़िगरेशन सेट करने के बीच क्या अंतर है? – u123

1

आप संसाधनों को लोड करने के बंडल एक की BundleContext उपयोग करने की कोशिश है के भंडारण के साधन के लिए अनुमति देता है?

Bundle bundle = Platform.getBundle("your.plugin.id"); 

Path path = new Path("path/to/a/file.type"); 

URL fileURL = Platform.find(bundle, path); 

InputStream in = fileURL.openStream(); 
+0

जेप और यह ठीक काम करता है, मैं सिर्फ परेशान हूं कि उदाहरण के लिए: this.getClass()। GetClassLoader()। GetResourceAsStream ( "bundle_A.properties"); जब बंडल को निर्भरता के रूप में निर्दिष्ट किया जाता है और .properties फ़ाइल निर्यात किए गए पैकेज में स्थित होती है। – u123

+0

क्योंकि 'यह' बंडल ए में है। बंडल बी से एक वर्ग का उपयोग करें और यह काम करता है। –

15

Bundle पर getEntry(String) विधि इस उद्देश्य के लिए करना है:

+1

यह भी ध्यान दें कि बंडल ए –

0

/ के साथ प्रयास करें; यदि आप / नहीं डालते हैं, तो क्लास लोडर संसाधन को उसी बंडल से लोड करने का प्रयास करेगा।

this.getClass().getClassLoader().getResourceAsStream("/bundle_A.properties") 
+0

से संसाधन युक्त पैकेज को निर्यात करने की कोई आवश्यकता नहीं है यह गलत है। यह अभी भी संसाधन को खोजने के लिए बंडल बी के क्लास लोडर का उपयोग करेगा जो बी के क्लास लोडर को बंडल करने के लिए दृश्यमान नहीं है / –

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