2011-02-08 10 views

Respuesta

22

Como se ha escrito en las respuestas anteriores, tiene dos opciones si desea utilizar bibliotecas adicionales en sus paquetes:

  1. incrustación de frascos de la biblioteca en un paquete en el que se va a utilizar,
  2. la creación de una paquete OSGi válido de la biblioteca.

El primera aproximación es más sencillo, ya que sólo tiene que copiar los tarros de la biblioteca (y todas sus dependencias) a un paquete (por ejemplo, a un directorio raíz) y luego añadirlos a Bundle-Classpath elemento en MANIFEST.MF (ver here) . Sin embargo, al hacer esto, debe recordar que esta biblioteca agregada solo será visible en un paquete en el que esté incrustada (para que la reutilización de la biblioteca sea limitada). Siempre puede agregar paquetes de esta biblioteca al elemento Export-package en MANIFEST.MF para hacerlo visible para otros paquetes, pero esto está lejos de ser una solución elegante (sin embargo, funcionará).

Con el fin de hacer que sea visible para otros paquetes que debe utilizar el segundo método , es decir, crear un paquete OSGi de la biblioteca (existen herramientas que pueden ayudarle en hacer eso, también en Eclipse). Sin embargo, para bibliotecas más complicadas, este enfoque puede ser más difícil (debido a las dependencias y al enfoque de carga de clase específica en OSGi).

Así que si desea utilizar la biblioteca solo en un paquete, le sugiero usar el primer enfoque (es más fácil de implementar). Si desea utilizar esta biblioteca en muchos paquetes en su aplicación, debe considerar el segundo enfoque.

3

Sí, es posible. Tiene dos opciones:

En primer lugar, puede incluir todos los paquetes de la biblioteca externa en la sección de paquete privado de su paquete. Incluirá todos estos paquetes en jar con su aplicación. La segunda opción es crear un paquete válido de osgi desde una biblioteca externa.

5

Sí, puede incrustar la biblioteca externa en su paquete o ajustar ("OSGIfy") la biblioteca como un paquete OSGi. Para ambas opciones, Pax Construct (http://www.ops4j.org/projects/pax/construct) es una buena herramienta.

Si su biblioteca externa tiene dependencias, incrústelas en un solo paquete o utilice Pax Construct para envolverlas.

Si tiene que elegir entre envolver o incrustar, considere la administración de dependencias y el control de versiones de los paquetes. Si necesita actualizar la biblioteca externa y está integrada en su propio paquete de aplicaciones, siempre liberará la biblioteca y su propio código. Por ejemplo, tampoco es posible tener 2 versiones de la biblioteca activas sin tener activada la versión 2 de su paquete de aplicaciones. Y también ... si no está trabajando en un entorno OSGi, ¿le gustaría agregar clases de terceros en los contenedores de aplicaciones? Entonces, ¿por qué hacerlo en un entorno OSGi?

Personalmente prefiero en ese caso ver la lib externa como una caja negra, y envolver la biblioteca y sus dependencias en un único paquete.

Cuestiones relacionadas