Pregunta

Hemos integrado un tiempo de ejecución OSGi (Equinox) en nuestra aplicación cliente-servidor personalizada para facilitar el desarrollo de complementos y hasta ahora todo va muy bien.Hemos estado usando Eclipse para crear complementos gracias al editor de manifiesto integrado, la administración de dependencias y el asistente de exportación.El uso de Eclipse para administrar compilaciones no es muy propicio para la integración continua a través de Hudson.

Tenemos paquetes OSGi que dependen de otros paquetes OSGi.Realmente odiaría codificar el orden de compilación en una compilación ANT personalizada.Hemos hecho esto en el pasado y es bastante horrible.¿Existe alguna herramienta de compilación que pueda administrar FÁCILMENTE las dependencias OSGi, si no las resuelve automáticamente?¿Hay algún ejemplo DECENTE de cómo hacer esto?

ACLARACIÓN:

Los scripts de compilación generados solo se pueden utilizar a través de Eclipse.Requieren ejecutar manualmente partes de Eclipse.También tenemos algunos objetivos estándar que la compilación de Eclipse no tendrá, y no quiero modificar el archivo generado ya que puedo regenerarlo (sé que puedo incluir, pero quiero evitar el archivo de generación de Eclipse por completo). juntos)

Aquí está el diseño de mi proyecto:

/
-PluginA
-PluginB
-PluginC
.
.
.

Al usar Eclipse PDE, cada complemento tiene un Manifiesto, pero no build.xml, ya que el PDE lo hace por mí.Es difícil automatizar un proceso impulsado por una interfaz gráfica de usuario con Hudson.Me gustaría configurar mi propio build.xml para compilar cada uno, PERO hay dependencias y problemas con el orden de compilación.Estos problemas se deben a los archivos de manifiesto (que describen las importaciones de OSGi).Por ejemplo, PluginC depende de PluginB, que depende de PluginA.Deben construirse en el orden correcto.Me doy cuenta de que puedo controlar manualmente el orden de compilación. Estoy buscando una herramienta que me ayude a automatizar la gestión de dependencias del orden de compilación.

¿Fue útil?

Solución 4

Cerrando algunas viejas preguntas...

Nuestra configuración no fue propicia para Maven debido a la falta de sincronización y conectividad de red.Sé que hay configuraciones de Maven fuera de línea, pero fue demasiado dado el tiempo.Con suerte podremos utilizar una configuración adecuada cuando tengamos tiempo de reorganizar el proceso de construcción.

La solución involucró Ant, BND y algunas tareas ant personalizadas.Las distintas dependencias del paquete se gestionan manualmente.Ya estábamos usando Ant;BND y las tareas personalizadas lo unieron todo.Las tareas personalizadas simplemente aseguraron que nuestros proyectos bnd/eclipse estuvieran sincronizados.

Otros consejos

Maven2 hasta el final;tiene un complemento de Eclipse llamado m2eclipse para ayudar con su gestión, resuelve exactamente el problema de dependencia y algo más.Tiene un libro en línea gratuito como documentación.

Mira específicamente proyectos de varios módulos para agrupar muchos componentes y hacer que Maven resuelva el orden de compilación y las dependencias.

También hay una capítulo sobre la integración de Eclipse.

Y eso es solo Eclipse y Maven, a continuación obtendrá algunas ventajas interesantes para OSGi:

Y fundamentalmente, el modelo de módulo Maven encaja perfectamente con el modelo de paquete de OSGi.Hemos estado creando y administrando múltiples productos con cientos de paquetes usando Maven durante más de 3 años y es fantástico.

Secundando a Maven2.Busque los complementos de Tycho para la compilación: utilizan el compilador JDT de Eclipse, por lo que implementa todas las reglas OSGi en tiempo de compilación, de la misma manera que lo hace Eclipse en tiempo de ejecución.

Alternativamente, los complementos Apache Felix BND también parecen populares.Prefiero Tycho porque parece unificar más estrechamente los entornos de desarrollo Maven y Eclipse.

Usamos Buckminster.Es un marco de construcción y ensamblaje, que se encarga de la resolución de dependencias, la recuperación de varios repositorios, la construcción y el empaquetado del producto.

Es un proyecto de herramientas de Eclipse.Se integra bien con PDE.

Esto significa que todos los metadatos que utilizamos para construir el RCP son útiles para que Buckminster los resuelva y construya.Por ejemplo, feature.xml y el encabezado Require-Bundle en Manifest.MF, .product.

Ahora no tenemos ningún script de compilación en cada paquete;Ahora tenemos una única construcción por producto.Buckminster se encarga de recorrer el gráfico de dependencia.

Requirió un poco de esfuerzo lograr que nuestro sistema existente de control de crucero/hormigas funcionara con él, aunque ellos (el equipo de Buckminster) comenzaron a usar Hudson para albergar el proyecto en sí.Creo que su configuración de compilación también está disponible para descargar.

Estamos realmente impresionados con él, a pesar de su relativa infancia.

También investigamos Construcción Pax pero no queríamos usar Maven.

Actualmente también estamos analizando Marco de prueba de Spring DM para aumentar el esfuerzo de pruebas unitarias.

Construcción PDE sin cabeza.Está bien documentado por Eclipse.Si está creando complementos de Eclipse y desea hacerlo a través de la línea de comandos, la compilación sin cabeza de Eclipse PDE es EL camino a seguir.

¿Puede explicar dónde ocurre el problema?Mencionas las dependencias del paquete OSGi.¿Esto es durante el tiempo de ejecución?¿O durante el tiempo de compilación?En el primer caso, debería considerar los servicios declarativos (consulte las especificaciones OSGi).

Usamos Hudson combinado con Generador de complementos para construir nuestros paquetes/complementos OSGi basados ​​en Eclipse.Esto se basa en el proceso PDE estándar de Eclipse para crear complementos.Esto significa utilizar Eclipse como compilador.

¡Maven no requiere conexión a Internet!Utilice el interruptor -o, por el amor de Dios.

Yo uso maven 3.0.2

mvn generar:arquetipo

select 252 - osgi-archetype
mvn idea:idea

ver http://felix.apache.org/site/apache-felix-maven-bundle-plugin-bnd.html

para agregar sus dependencias al paquete use este breve ejemplo en pom.xml

<Export-Package>org.foo.myproject.api</Export-Package>

o

<Import-Package>org.foo.myproject.api</Import-Package>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top