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?
¿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. –
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
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. –