Estoy usando OSGi para mi último proyecto en el trabajo, y es muy bonito en cuanto a modularidad y funcionalidad.¿Qué es un flujo de trabajo de desarrollo de OSGi razonable?
Pero no estoy contento con el flujo de trabajo de desarrollo. Eventualmente, planeo tener 30-50 paquetes separados, organizados en un gráfico de dependencia; supuestamente, esto es para lo que OSGi está diseñado. Pero no puedo encontrar una manera limpia de administrar dependencias en compilar tiempo.
Ejemplo: Tiene los paquetes A y B. B depende de los paquetes definidos en A. Cada paquete se desarrolla como un proyecto separado de Java.
Para compilar B, A tiene que estar en el classpath javac.
¿Te:
- referencia a la ubicación del sistema de archivos de proyecto en un script de compilación de B?
- ¿Compila A y tira el contenedor en el directorio lib de B?
- Confiar en función de "proyectos de referencia" de Eclipse y utilice siempre la ruta de clases de Eclipse para construir (uf)
- Usar un directorio "lib" común para todos los proyectos y volcar los frascos de haces allí después de la compilación?
- ¿Configurar un repositorio de paquetes, analizar el manifiesto del script de construcción y desplegar los paquetes necesarios del repositorio?
No. 5 suena más limpio, pero también como un montón de sobrecarga.
Las dependencias binarias son peligrosas para recomendar. Ayudé a un cliente la semana pasada a depurar un problema del cargador de clases provocado por tener 2 copias del mismo contenedor binario en 2 paquetes diferentes. Cuando intentaron pasar instancias de objetos desde el paquete binario de un paquete al otro, hubo una excepción de clase. Es mucho mejor utilizar los enunciados de paquete de importación/exportación como estaban destinados. En el caso del cliente, la solución consistía en hacer un paquete del binario que exportaba los paquetes requeridos. Luego, ambos paquetes de clientes importaron los paquetes que necesitaban del nuevo paquete. –
Hm. Esperaba evitar Mavenizar todo el proyecto, pero es posible que no lo pueda evitar. – levand
¿Tiene un seguimiento de esta pregunta, cómo lo manejó? Tengo un problema muy similar que resolví mediante la reinvención de la rueda Maven. Me costó un gran esfuerzo evitar usar Maven y finalmente terminé con una solución que era un subconjunto de Maven que eventualmente tendré que convertir a Maven. Cuanto más complejas sean las dependencias de un proyecto, más beneficios obtendrá Maven de alguien que realmente no le gusta la complejidad del mismo). – Chris