2010-06-10 7 views
5

Tengo un proyecto que hace referencia a varias bibliotecas de código abierto, algunas nuevas y otras no tan nuevas. Dicho esto, todos son estables y deseo seguir con mis versiones elegidas hasta que tenga tiempo de migrar a las versiones más nuevas (ayer probé hsqldb 2.0 y contiene muchos cambios de API).¿Cuál es la forma estándar de agrupar bibliotecas dependientes de OSGi?

Una de las bibliotecas que deseo incorporar es Jasper Reports, pero como seguramente sabrán, viene con una montaña de archivos jar auxiliares y solo necesito un subconjunto de la montaña (conocido), por lo tanto estoy planeando para agrupar todas mis bibliotecas dependientes.

Así:

  • ¿Todo el mundo a medida hacen sus propios paquetes OSGi para bibliotecas de código abierto que están utilizando o hay una fuente principal de OSGi versiones de bibliotecas comunes?

  • Además, estaba pensando que sería mucho más simple para cada uno de mis paquetes simplemente insertar sus frascos dependientes dentro del paquete. es posible? Si elijo incrustar las bibliotecas foc de terceros dentro de un paquete, supongo que tendré que producir 2 archivos jar, uno sin las bibliotecas integradas (para que las bibliotecas se carguen a través del classpath mediante el cargador de clases estándar) y una versión de osgi que incluya la libraryy incorporado, por lo tanto, debería elegir un nombre de paquete como este < <myprojectname> > - < <subproyecto> > -osgi-.1.0.0.jar?

  • Si no puedo incrustar las bibliotecas de código abierto y elegir agrupar las bibliotecas de código abierto (vía bnd), ¿debo elegir un nombre único para evitar conflictos con un posible paquete oficial? p.ej. < <myprojectname> > - < <3rdpartylibname> > - < <3rdpartylibversion> > .jar?

  • Mi proyecto no habilitado para OSGi actualmente busca plugins personalizados escaneando las carpetas META-INF en mis varios plugins a través de Service.providers (...). Si voy a OSGi, ¿funcionará este mecanismo?

Respuesta

7

Prefiero no incrustar los frascos dependientes (sí, es posible). Causa dos problemas,

1) No hay reutilización de este código. Muchos paquetes pueden simplemente hacer lo mismo (insertar el mismo contenedor) y terminar con el mismo contenedor instalado muchas veces. Usted puede argumentar que su paquete también puede exportar las interfaces para el jar incrustado, pero esto se pone feo, ya que no debe ser responsabilidad de su paquete exponer ese código. También hace que sea más fácil tener expuestas múltiples versiones de la biblioteca, o múltiples proveedores de la misma versión.

2) Esto es específico de Eclipse: las jarras incrustadas no se resuelven correctamente en el entorno de desarrollo (aún funciona en tiempo de ejecución). Mi paquete puede depender de un paquete en mi plataforma de destino, y no podrá resolver los elementos en los archivos jar integrados, deben importarse en el área de trabajo para funcionar.

He encontrado que la mayoría de los frascos de código abierto ya han sido amablemente bundled by the nice folks at Spring. También hay otros repos disponibles, pero desafortunadamente perdí mis enlaces a ellos.

+2

Los frascos de Spring llevan impreso Spring, además de que parecen ser versiones anteriores de bibliotecas (como la versión 2.0.5 de Jasper Reports). OSGi parece agradable en teoría, pero parece que todo el mundo está construyendo sus propios paquetes (incluido Spring), lo que de alguna manera frustra el propósito. Por no mencionar el problema de JDBC con OSGi. DLL El infierno se resolvió con classpath. El infierno de Classpath fue resuelto con OSGi. ¿Qué nos salvará del paquete de OSGi infierno? – Chris

+1

@Chris: es bastante cierto en cuanto a la denominación, pero como no existe una autoridad central para proporcionar los paquetes y el propietario no los está creando, parece un compromiso razonable. Al menos sabes de dónde vino, y no hace ninguna diferencia una vez que se implementa. En cuanto a su utilidad, es solo otra herramienta en el cinturón, bastante útil para construir sistemas de tipo conectable. – Robin

+0

La idea de utilizar spring repo como fuente de complementos externos de rcp es excelente, pero ¿dónde puedo encontrar la URL del sitio repo/update que necesito agregar a mi definición de destino? Traté de googlearlo pero no pude encontrar una URL funcional. Sé que agregar la url a la respuesta pronto será obsoleta. Pero definitivamente ayudaría y tal vez otros lo actualizarán en el futuro ... – Jens

2

Quizás esté buscando algo como Maven? Sin embargo, no estoy seguro de cómo eso funcionaría con OSGi. Puede encontrar un poco de información sobre los informes de Jasper con Maven aquí: http://mvnrepository.com/artifact/jasperreports/jasperreports

+0

El enlace no es para paquetes OSGi. Pero es un buen enlace para ver las dependencias de Jasper. – Chris

2

El proyecto Eclipse Orbit también ha creado paquetes de muchos archivos de terceros de uso común.

http://www.eclipse.org/orbit/

+0

Gracias por el enlace. Lamentablemente, mi pregunta sigue siendo sin embargo. – Chris

1

ser específico acerca de las preguntas que se le pide.

Todo el mundo no hace su propia. Vea mi respuesta anterior para un enlace al paquete Eclipse de bibliotecas de terceros como paquetes. Si no puede encontrar la versión ya empaquetada, tendrá que hacer la suya propia.

Es mejor ajustar las dependencias binarias en su propio paquete que incluir el contenedor como un archivo binario en el paquete de códigos. Elija el nombre de paquete que desee, es el paquete de las importaciones y exportaciones que importan. Los nombres que forman el nombre del paquete con el nombre de su proyecto se asegurarán de que no golpee las colisiones.

No es imposible acceder al área de almacenamiento del paquete para escanear, pero suele requerir información específica del tiempo de ejecución de OSGi sobre cómo/dónde se extraen los paquetes. Entonces es posible, pero no es fácil.

+0

A través de OSGi, ¿cómo puedo saber qué complementos están disponibles a través de paquetes no instalados? Normalmente escaneo el classpath para un archivo que puse en el META-INF actualmente. Parece que OSGi es incompatible con cualquier cosa que actualmente use classpath para la modularidad. "Mi proyecto no compatible con OSGi actualmente busca plugins personalizados escaneando las carpetas META-INF en mis diversos plugins a través de Service.providers (...). Si utilizo OSGi, ¿funcionará este mecanismo?" – Chris

0

hemos estado usando Maven con OSGI, declaramos las dependencias del paquete en su pom.xml y ya no tiene que preocuparse por ellas.

+1

Eso no es del todo cierto, sin embargo.Debe obtener o crear los paquetes usted mismo (no todo está incluido), debe permitir que los paquetes se implementen y administrar las versiones correctas (no puede simplemente reemplazar un paquete con una versión superior; los paquetes dependientes pueden necesitar la versión anterior)) y así. Esto es especialmente importante si la distribución es manejada por una división diferente en la empresa, por ejemplo, los administradores del sistema. – extraneon

Cuestiones relacionadas