2009-09-04 11 views
15

Estoy tratando de incrustar Algunos frascos en un solo paquete OSGi utilizando la función de maven-bundle-pluginJAR en el paquete OSGi con Maven-haz-plugin

Lo que me preocupa es que todos los paquetes de tarros incrustados se ponen en el encabezado Import-Package del MANIFEST.MF generado.

Si yo indique explícitamente para utilizar sólo los paquetes que necesito, como en el siguiente fragmento:

Import-Package: org.osgi.framework 

La generación falla con el error (BND referencias no resueltas).

Entonces, la pregunta aquí es ¿cómo puedo construir el paquete con JAR incrustados con el encabezado "Import-Package" que necesito?

+0

¿Podría publicar las instrucciones maven-bundle-plugin que utiliza? –

Respuesta

9

Todos los paquetes que se importan en sus clases serán importados por bnd. Tal vez no desee importar esos paquetes porque usted sabe que en tiempo de ejecución no los va a necesitar. Si no puede dejar de importarlos, puede hacerlos opcionales para que su paquete se resuelva incluso si no son suministrados por otro paquete (en tiempo de conexión). Intente agregar esto:

<Import-Package>*;resolution:=optional<Import-Package> 

Para su configuración maven bnd en maven.

+1

No deseo que se importen por dos motivos: 1) están en el mismo paquete (en JAR incrustados), por lo que entiendo, ¡no es necesario que los importe por completo! Entonces solo agrega algo de basura al MANIFEST.MF, que quiero que esté limpio. 2) No quiere que se importen accidentalmente de otro paquete. –

+0

El complemento del paquete fue bastante frustrante hasta que descubrí esto. – javamonkey79

5

Una posible razón por la que está viendo paquetes "inesperados" en la cabecera Import-Package es el siguiente:

Una buena práctica general que apoya el modelo de colaboración en OSGi es importación de todos los paquetes que exporta - ver this blog post por Peter Kriens para una explicación detallada de por qué. Bnd (y, por lo tanto, también Maven-bundle-plugin) sigue esta práctica de forma predeterminada y automáticamente importa todos los paquetes exportados. Por lo tanto, primero debe verificar su encabezado Export-Package y asegurarse de exportar solo los paquetes que desea.

Además, si desea exportar paquetes desde las dependencias incrustadas, debe tener cuidado para evitar la duplicación dentro de su paquete; consulte la sección Embed-Dependency and Export-Package de la documentación de maven-bundle-plugin.

+0

Quizás tengas razón ... Lo comprobaré la próxima vez que golpee esto. Por ahora, decidimos no ir con manifiestos autogenerados. –

5

Debe usar Bundle-ClassPath si desea que las clases estén disponibles dentro de un paquete que contenga JAR, p.

Bundle-ClassPath: foo.jar,other.jar 
Import-Package: org.osgi.framework,org.other.imported 

Tendrá que enumerar las clases que foo.jar y other.jar importación/uso, pero que no tendrá que hacer una lista cualquiera de los paquetes en foo.jar o other.jar a menos que' estamos realmente exportándolos.

+0

Derecha. ¡Y el problema es que el complemento maven OSGi (que está construido sobre la herramienta bnd) crea un paquete de importación para cada paquete dentro de foo.jar y other.jar! –

+0

Puede configurar bnd para no generar instrucciones de importación para ciertos paquetes. También es posible que desee intentar generar un error contra BND para este ejemplo. – AlBlue

2

Puede eliminar algunos paquetes del ámbito de aplicación de importación-paquete cuando incrusta un JAR en su paquete:

<Import-Package>![package_name9]<Import-Package> 

dentro pom.xml o si utiliza archivos externos * .bnd:

Import-Package: ![package_name] 
Cuestiones relacionadas