2012-03-19 11 views
8

He creado un pequeño paquete de API y un paquete de servicio que debería usar la API.no se puede iniciar el paquete de osgi porque no se puede resolver la importación

En mi pom.xml experto, he añadido un dependecy para mi paquete de API en la versión correcta de esta manera:

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

estoy usando el plugin maven-paquete para crear los paquetes, y porque de eso usé mvn clean install para crear por archivo jar. El Manifiesto se parece a esto (el servicio):

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 

que parece estar bien para mí. La importación está allí, así que todo debería estar bien.

ahora inicié Equinox e instalé la API y el paquete del productor. Luego, inicio la API, que funcionó bien. Pero cuando quiero iniciar el servicio de Productor me sale este error:

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" 

Parece que el marco no puede encontrar la API, pero su instalación y puesta?

+0

¿Ha disparado la consola equinoccio y correr 'paquetes at.foobar.osgi.api' para confirmar que el paquete es exportado por su paquete de API? Si obtienes una enorme lista desplegable de paquetes, eso significa que ningún paquete exporta ese paquete. También probaría 'paquete [api-bundle-name]' para ver qué paquetes exporta el paquete de API, y confirmar que se haya iniciado. –

+0

mh Olvidé exportar la API ... pero ¿qué no entiendo por qué necesito exportarlo? Leí la especificación Core y pensé que el paquete API no debería exportarse porque se resolvió por osgi. – reox

+2

El paquete debe ser exportado por su paquete O incluido en el paquete (es decir, listado en Paquete privado). No ha hecho ninguna de las dos cosas, por lo que Bnd lo detecta como un paquete Importado. Probablemente Exportar es correcto porque suena como una API que otros paquetes pueden querer usar. –

Respuesta

6

Asegúrese de que está exportando los paquetes de API, para que su paquete de servicio pueda enlazarse a ellos.

En su experta-haz-plugin para el conjunto de API que debe tener algo como:

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

tipo que acaba de salvarme de convertirme en un alcohólico. ¡Muchísimas gracias! – Chris

Cuestiones relacionadas