2010-12-30 5 views
5

yo estaba buscando en las herramientas PAX en OPS4J por ejemplo: this one y pensé que había encontrado una buena manera de:buena manera de "envolver" los tarros para OSGi con Maven

  • Especificar un artefacto
  • crear un frasco de ensamblado (frasco que contiene todas las dependencias) de ese frasco y sus dependencias transitivas
  • Envuélvanlo con BND para crear un paquete OSGi

resulta, que estaba equivocado - no lo hace apariencia r que las cosas de PAX hacen esto. (RTFM, ¿verdad? :))

Pero esto me hizo preguntarme: ¿hay algo por ahí que haga lo que estoy pidiendo?

He pensado que quizás podría hacer esto creando un POM simple y usando el plugin maven-bundle pero parece que puede ser un poco engorroso para lo que estoy preguntando.

NOTA: Entiendo que el tarro de inserción y ensamblaje no es realmente "el modo OSGi", así que no haría esto a menos que realmente lo sintiera útil. Por ejemplo, Spring.

Gracias de antemano.

+0

Pensé que Spring ya tenía módulos compatibles con OSGi. Si tiene jarras que necesita usar, ¿por qué no las incrusta en un módulo OSGi? –

+0

Sí, Spring lo hace. Así que tal vez ese sea un mal ejemplo: lo que estoy impulsando es que puede ser doloroso tener que implementar 15 dependencias (convertidas en paquetes o no) cuando no se necesitan esas 15 divisiones. – javamonkey79

Respuesta

4

tienes que mantener un POM local para hacer esto. No hay una utilidad que tome en una biblioteca/jar y escupe el OSGi MANIFEST apropiado en un jar. ServiceMix, junto con Spring, tiene un montón de cosas ya integradas que puede usar como ejemplos. Dos ejemplos de este tipo Sugiero que miran son:

  • commons-io - simple biblioteca envoltorio
  • OpenJPA - envuelve el frasco principal y trae en las dependencias con él
+0

Al trabajar con SMX, pensé que había * algo * allí afuera. Gracias (+1) – javamonkey79

2

Hacemos algo similar a lo que está describiendo. Por ejemplo, tenemos una versión interna de Apache QPid. Se trata de 6 jarras (cliente, núcleo, comunes, backports, etc.) que rara vez usarías individualmente. Tenemos un POM con BND que toma todos los frascos y hace un frasco uber-osgi de ellos.

Pasos:

  1. declara su dependencias (tenemos los frascos, por lo que los declaró como deps del sistema.)
  2. importación acumulación plugin de maven-haz-plugin (2.1.0)
  3. Set instrucciones correctas para la exportación, paquetes privados y de importación
  4. ejecución de la meta 'wrap' en 'paquete' fase
+0

Probablemente pueda adjuntar el POM si es necesario. – omerkudat

+0

Sí, esto es lo que quería decir con "He pensado que tal vez podría hacer esto mediante la creación de un POM y sencilla utilizando el experto-haz-plugin, pero esto parece que podría ser un poco engorroso para lo que te pido." . Sin embargo, como no creo que exista una solución más sencilla en este momento, si publica un POM, lo aceptaré con la esperanza de que ayude a alguien más :) – javamonkey79

8

escribí un arquetipo de Maven que ayudan envuelve un frasco como un paquete OSGI.

Digamos que usted quiere envolver Commons-colecciones versión 3.2.1

En primer lugar obtener el arquetipo e instalarlo

git clone git://github.com/HallwayTech/maven-wrap-jar-archetype.git 
cd maven-wrap-jar-archetype 
maven install 

A continuación, utilice el arquetipo para iniciar su proyecto.

mvn archetype:create \ 
    -DarchetypeGroupId=com.hallwaytech.osgi \ 
    -DarchetypeArtifactId=wrap-jar \ 
    -DarchetypeVersion=1.0-SNAPSHOT \ 
    -DgroupId=commons-collections \ 
    -DartifactId=commons-collections \ 
    -Dversion=3.2.1 

cd Commons-colecciones

mvn install 

Para desplegar en un cabestrillo Apache en el interior de Félix de ejecución:

mvn install -Pdeploy 
1

me trataron The accepted answer y Erik's answer. La sugerencia de Erik fue simple y funcionó bien. Aunque, parecía producir un gran MANIFEST en mi caso, y luego recordé el p2-maven-plugin. Este último método funciona muy bien en una gran cantidad de casos. Si el artefacto que necesita ya está agrupado, o sus dependencias son paquetes, simplemente los coloca en el repositorio que construye. De lo contrario, se ejecutará maven-bundle-plugin con algunas configuraciones predeterminadas (o puede configurar las configuraciones que necesita). ¡Muy genial!

Me gusta especialmente que agarra las dependencias transitivas y se ocupa de ellas también. Si no necesita el repositorio, pero está justo después del paquete envuelto, es una simple cuestión de ir a recogerlo de la carpeta target/repository/plugins.

Cuestiones relacionadas