Tenemos un gran proyecto (~ 215 paquetes y contando) osgi (felix + springdm), compilación con el plugin maven y maven-osgi.cambiando a gradle de maven para gestionar un gran proyecto osgi (> 200 paquetes)
Hemos varios problemas con forma experta:
1. submódulos pom tiene que heredar de los padres pom para tomar ventaja de las variables y dependencias comunes (que está bien), pero luego pom padre tiene que incluir todos los paquetes a POM ser capaz de construir todo en conjunto. Este tipo de referencia circular hace que sea muy difícil mantener todo sincronizado.
2. la versión individual de los subgrupos era tan compleja que se decidió (antes de unirme al proyecto) utilizar la misma versión para todos los paquetes. Esto significa que ahora actualizamos la versión de todos los paquetes para cada versión también si solo se cambian algunos de ellos. Esto hace que todo el concepto de osgi sea un poco sin sentido en mi humilde opinión. Tenga en cuenta que no estoy diciendo que continuemos tocando solo una pequeña cantidad de paquetes, trabajamos en todos ellos, pero cada versión por lo general contiene 1 o 2 funciones, lo que afecta solo a algunos paquetes.
3. Para realizar el paquete y la implementación del artefacto final, necesitamos otro submódulo que importe todos los paquetes necesarios para la implementación (todos salvo unos pocos para pruebas y simulacros). [editado] Tenga en cuenta que esta agregación es diferente de la del pomo principal, ya que no compila los paquetes, sino que simplemente los selecciona del repositorio de maven.
4. el sistema de dependencia maven y las importaciones del complemento osgi a veces son difíciles de mantener alineados. Es demasiado fácil olvidar una importación o poner una dependencia incorrecta.
[editado] En cada pom paquete hay una sección de esta manera: `
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<instructions>
<Export-Package>
</Export-Package>
<Import-Package>
com.google.gson,
org.apache.log4j,
org.apache.log4j.spi,
org.dom4j,
com.myinterfaces
</Import-Package>
</instructions>
</configuration>
</plugin>`
Por todas estas razones, estamos bien, pero no muy feliz con Maven. Recientemente, alguien propuso Gradle no como una panacea, sino como una mejora definitiva sobre la situación actual.
¿Recomendarías mudar a gradle? y en caso de que sería la mejor manera?
¿Alguien más ha experimentado la misma situación? Creo que debería ser común para todos los grandes proyectos con Osgi.
Negación: buscó preguntas similares como:
Buildr, Gradle or wait for Maven 3?
Looking for a good dev environment for OSGi bundles
Maven : OSGI, bundles and multi-modules projects
pero o bien en donde no se trata de submódulos OSGi o no sobre Gradle.
Estoy viendo esta pregunta como un halcón. Pronto trasladaremos un paquete de software similar a OSGi y ya tenemos dependencias complicadas. Así que estoy rezando por una bala de plata aquí :) – extraneon
Tengo curiosidad sobre tu punto número 4. No lo mencionas explícitamente, pero parece que estás usando el paquete maven-plugin, que internamente usa bnd para generar el MANIFEST.MF. En ese caso, ¿por qué necesita mantener manualmente las importaciones? Como bnd genera la instrucción Import-Package analizando su bytecode, es esencialmente imposible "olvidar una importación". Bnd también podría mejorar la administración de su versión también ... –
Sí, estamos usando maven-bundle-plugin, edité la pregunta con un ejemplo. – Uberto