ant osgi apache-felix bnd

ant - Incrustar JAR de terceros utilizando BND



osgi apache-felix (2)

Hay una tarea Ant suministrada por BND llamada "bndwrap" . No está bien documentado. Cuando traté de usarlo, tuve que leer el código Java para ver qué estaba haciendo. (Ver el método bnd#doWrap() aquí también).

Recuerdo que también es posible "incrustar" un archivo Jar dependido de otra manera: no directamente como Jar-in-a-Jar, sino sorbiendo todas sus clases en su paquete, simplemente declarando en su Private-Package Directiva BND que los paquetes proporcionados por el otro Jar deben incluirse en el suyo. Alternativamente, puede mencionar esos paquetes en una directiva Export-Package para incluirlos y exportarlos.

Tengo un paquete OSGi que está construido usando ANT y la clásica herramienta BND. Mi paquete usa una biblioteca (JAR) internamente, que no está disponible como un paquete dentro de mi contenedor OSGi (Apache Felix). Por lo tanto, intento incrustarlo dentro de mi paquete , para acceder en tiempo de ejecución.

¿Cómo puedo integrar una biblioteca / JAR usando ANT + BND? (Nota: No puedo usar MAVEN, lo cual podría haber sido mucho más fácil)


Necesitas dos instrucciones en tu descriptor bnd . Primero use Include-Resource para incluir el JAR objetivo en su paquete:

Include-Resource: foo.jar

Luego debe especificar que foo.jar debe estar en el paquete classpath. Supongo que el contenido del paquete también necesita ser parte del classpath del paquete, por lo que debemos incluirlo también con un punto:

Bundle-ClassPath: ., foo.jar

Tenga en cuenta que la respuesta de @seh sobre sorber los paquetes del JAR en su paquete con paquete Private-Package también es correcta (en ese caso, el JAR debería estar visible en el classpath del tiempo de compilación). Sin embargo, nunca usaría Export-Package para esto, porque creo que los paquetes deben tener un control estricto sobre cuánto exportan.