2010-12-30 13 views
5

stavo guardando gli strumenti PAX su OPS4J ad esempio: this one e ho pensato che avevo trovato un bel modo per:Buon modo per "avvolgere" vasi per OSGi con Maven

  • Specificare un artefatto
  • creare un vaso assemblato (vaso che contiene tutte le dipendenze) da quel vaso e le sue dipendenze transitive
  • avvolgerlo con BND per creare un pacchetto OSGi

si scopre, che mi sbagliavo - non è così appea r che il materiale PAX fa questo. (RTFM, giusto? :))

Ma questo mi ha fatto chiedere: c'è qualcosa là fuori che fa quello che sto chiedendo?

Ho pensato che forse avrei potuto farlo creando un semplice POM e utilizzando il plugin maven-bundle ma sembra che potrebbe essere un po 'macchinoso per quello che sto chiedendo.

NOTA: Ho capito che l'embedding e l'assemblaggio di jar non sono in realtà "il modo OSGi", quindi non lo farei se non mi sentissi davvero utile. Ad esempio - Primavera.

Grazie in anticipo.

+0

Pensavo che Spring avesse già moduli compatibili con OSGi. Se si dispone di vasi da utilizzare, perché non incorporarli in un modulo OSGi? –

+0

Sì, la primavera sì. Quindi forse questo è un cattivo esempio: quello a cui sto guidando è che può essere doloroso dover distribuire 15 dipendenze (convertite in bundle o meno) quando non si ha bisogno di queste 15 divisioni. – javamonkey79

risposta

4

È necessario mantenere un POM locale per ottenere questo risultato. Non c'è un'utilità che includa una libreria/un barattolo e sputa fuori l'OSGi MANIFEST appropriato in un barattolo. ServiceMix, insieme a Spring, contiene già molte cose che puoi usare come esempio. Due esempi Suggerisco guardando sono:

  • commons-io - semplice libreria wrapper
  • OpenJPA - avvolge il vaso principale e porta nelle dipendenze con esso
+0

Dal lavoro con SMX ho pensato che ci fosse * qualcosa * là fuori. Grazie (+1) – javamonkey79

2

Facciamo qualcosa di simile a quello che stai descrivendo. Ad esempio, abbiamo una versione interna di Apache QPid. Si presenta come 6 jars (client, core, common, backport, ecc.) Che raramente useresti individualmente. Abbiamo un POM con BND che prende tutti i barattoli e ne ricava un barattolo di uber-osgi.

Passi:

  1. dichiarare le dipendenze (abbiamo i vasi, così li abbiamo dichiarato come dipendenze di sistema.)
  2. Import costruire plug Maven-fascio-plugin (2.1.0)
  3. Set istruzioni corrette per l'esportazione, pacchetti privati ​​e di importazione
  4. Esecuzione di obiettivo 'wrap' a 'pacchetto' fase
+0

Posso probabilmente collegare il POM se necessario. – omerkudat

+0

Sì, questo è quello che intendevo per "Ho pensato che forse avrei potuto farlo creando un semplice POM e usando il plugin maven-bundle ma sembra che potrebbe essere un po 'macchinoso per quello che sto chiedendo." . Tuttavia, poiché non penso che ci sia una soluzione più semplice in questo momento, se pubblichi un POM accetterò nella speranza che possa aiutare qualcun altro :) – javamonkey79

8

ho scritto un archetipo Maven che vi aiuterà si avvolge un barattolo come pacchetto OSGI.

Diciamo che si desidera avvolgere Commons-collezioni versione 3.2.1

prima ottenere l'archetipo e installarlo

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

Quindi utilizzare l'archetipo per avviare il progetto.

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-collezioni

mvn install 

la distribuzione a un Apache Sling all'interno di corsa Felix:

mvn install -Pdeploy 
1

ho cercato The accepted answer e Erik's answer. Il suggerimento di Erik era semplice e funzionava a prima vista. Anche se, nel mio caso, sembrava produrre un enorme MANIFEST, e poi ho ricordato lo p2-maven-plugin. Quest'ultimo metodo funziona molto bene in un gran numero di casi. Se l'artefatto di cui hai bisogno è già in bundle, o le sue dipendenze sono bundle, semplicemente le inserisce nel repository che costruisce. In caso contrario, verrà eseguito maven-bundle-plugin con alcune impostazioni predefinite (oppure è possibile configurare le impostazioni necessarie). Molto bello!

Mi piace soprattutto che afferra le dipendenze transitive e si prende cura anche di quelle. Se non si ha bisogno del repository, ma si trova subito dopo il bundle, è semplice scegliere il file dalla cartella target/repository/plugins.

Problemi correlati