2012-03-19 22 views
8

मैंने एक छोटा एपीआई बंडल और एक सेवा बंडल बनाया है जो एपीआई का उपयोग करना चाहिए।ओजीआई बंडल शुरू नहीं कर सकता क्योंकि आयात को हल नहीं किया जा सकता

<dependency> 
    <groupId>at.foobar.osgi.api</groupId> 
    <artifactId>foobarapi</artifactId> 
    <version>1.0</version> 
</dependency> 

मैं बंडलों बनाने के लिए Maven-बंडल प्लगइन का उपयोग कर रहा है, और क्योंकि:

मेरी Maven pom.xml फ़ाइल में, मैं इस तरह सही संस्करण में अपने एपीआई बंडल के लिए एक निर्भरता जोड़ा उस में मैंने जार फ़ाइल बनाने के लिए mvn clean install का उपयोग किया था। प्रकट इस (सेवा) की तरह दिखता है:

Manifest-Version: 1.0 
Private-Package: at.foobar.osgi.producer 
Built-By: foobar 
Tool: Bnd-0.0.238 
Bundle-Name: foobarproducer 
Created-By: Apache Maven Bundle Plugin 
Bundle-Version: 1.0 
Build-Jdk: 1.6.0_26 
Bnd-LastModified: 1332185439257 
Bundle-ManifestVersion: 2 
Bundle-Activator: at.foobar.osgi.producer.Activator 
Import-Package: at.foobar.osgi.api,org.osgi.framework;version="1.4" 
Bundle-SymbolicName: at.foobar.osgi.producer.foobarproducer 

जो मेरे लिए ठीक हो रहा है। आयात वहां है, इसलिए सबकुछ ठीक होना चाहिए।

अब मैंने विषुव शुरू किया और एपीआई और निर्माता बंडल स्थापित किया। फिर मैंने एपीआई शुरू किया, जो ठीक काम करता था।

org.osgi.framework.BundleException: The bundle "at.foobar.osgi.producer.foobarproducer_1.0.0 [4]" could not be resolved. Reason: Missing Constraint: Import-Package: at.foobar.osgi.api; version="0.0.0" 

ऐसा नहीं है कि ढांचे एपीआई नहीं मिल सकता है लगता है, लेकिन इसकी स्थापित किया है और शुरू कर दिया: लेकिन जब मैं निर्माता सेवा शुरू करना चाहते हैं मैं इस त्रुटि मिलती है?

+0

आपको लगता है कि पैकेज की पुष्टि करने के विषुव कंसोल और रन 'संकुल at.foobar.osgi.api' ऊपर निकाल दिया है आपके एपीआई बंडल द्वारा निर्यात किया जाता है? यदि आपको पैकेजों की एक बड़ी स्क्रॉलिंग सूची मिलती है, तो इसका मतलब है कि पैकेज में कोई बंडल निर्यात नहीं है। मैं यह देखने के लिए 'बंडल [एपीआई-बंडल-नाम]' का प्रयास भी करूंगा कि एपीआई बंडल किस पैकेज को निर्यात करता है - और इसकी पुष्टि करें कि यह स्वयं शुरू हो गया है। –

+0

mh मैं एपीआई निर्यात करना भूल गया ... लेकिन मुझे नहीं पता कि मुझे इसे निर्यात करने की आवश्यकता क्यों है? मैंने कोर स्पेक पढ़ा और सोचा कि एपीआई पैकेज को निर्यात नहीं किया जाना चाहिए क्योंकि यह ओजीआई द्वारा हल किया गया है? – reox

+2

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

उत्तर

6

सुनिश्चित करें कि आप API पैकेज निर्यात कर रहे हैं, ताकि आपकी सेवा बंडल उनसे जुड़ सके।

एपीआई बंडल आप की तरह कुछ करना चाहिए था के लिए अपने Maven गठरी-प्लगइन में:

  <configuration> 
       <instructions> 
        <Import-Package> 
         * 
        </Import-Package> 
        <Export-Package> 
         at.foobar.osgi.api.* 
        </Export-Package> 
       </instructions> 
      </configuration> 
+4

दोस्त आपने मुझे सिर्फ शराब बनाने से बचाया है। आपका बहुत बहुत धन्यवाद! – Chris

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