2014-07-16 23 views
13

Ho deciso di creare un'applicazione su OSGI e Karaf - Mi piace molto questa roba. Tuttavia, sto faticando un po 'con una distribuzione giornaliera sul mio computer di sviluppo locale. Voglio dire .. Io apporto una modifica e poi vorrei testarlo sulla mia istanza Karaf locale. E può succedere come un paio di volte all'ora.Come lavorare con frequenti distribuzioni di pacchetti snapshot locali su Karaf?

Il modo in cui lo sto facendo ora è una generazione di maven che crea un pacchetto JAR e quindi viene copiato nella directory di distribuzione di Karaf. Penso che non sia affatto elegante.

Stavo cercando di trovare un modo per aggirare (google). Ho letto delle caratteristiche di Karaf ma sembra che, nonostante sia un buon meccanismo per distribuire l'intera app, non risolve il mio problema. Come ho capito bene, non controlla se la nuova versione del mio barattolo SNAPSHOT è apparsa nel mio repository locale di Maven, giusto?

+0

Perché non eseguire un framework OSGi direttamente dal tuo IDE? –

+0

Suggerite l'avvio di framework Karaf/OSGI con ogni esecuzione di un'applicazione? Oppure raggruppare la distribuzione su Karaf usando IDE? –

+0

Sto suggerendo di eseguire il bundle in un framework OSGi ogni volta che è necessario eseguirlo. Karaf è un server di applicazioni, non vorrei implementarlo per lo sviluppo. –

risposta

25

La chiave per rendere il meccanismo di aggiornamento di karaf funziona è distribuire da Maven anziché utilizzare la cartella di distribuzione. Installa si bundle in questo modo:

install -s mvn:groupid/artifactID/version 

o

install -s mvn:groupid/artifactID/version/typeOfMavenArtifact 

secondo è utile per l'installazione, ad esempio la guerra/artefatti WAB. Le specifiche del protocollo Maven completo possono essere trovate here.

Quindi Karaf sa da dove viene il pacco. Puoi anche verificarlo utilizzando la -u. Questo fa mostrare a Karaf la posizione dell'aggiornamento che ora dovrebbe essere un esperto uri. Non tutti i pacchetti karaf hanno una posizione di aggiornamento come questa.

Quando ora crei una nuova build del tuo progetto usando maven finirà nel tuo repository di maven locale. Poi basta eseguire

update <bundleid> 

Questo rende karaf controllare la posizione di aggiornamento (nel tuo caso locale Maven pronti contro termine) e ricaricare il pacco da lì.

si può anche automatizzare ulteriormente questo utilizzando

dev:watch 

o per karaf 3+

bundle:watch 

Questo vi farà karaf controllare di Maven pronti contro termine per le modifiche in fasci SNAPSHOT si è schierato e automaticamente ridistribuire queste.

Anche questo funziona molto bene insieme al debug remoto. Utilizzare

export KARAF_DEBUG=true 

prima di iniziare karaf. Quindi ascolterà un debugger sulla porta 5005.

È quindi possibile avviare una sessione di eclissi di debug remoto sulla stessa porta e eseguire correttamente il debug dell'applicazione in karaf. Funziona molto bene anche se cambi il tuo bundle usando uno degli approcci precedenti. Quindi puoi eseguire il debug, trovare il tuo problema, cambiare il codice, creare e continuare il debugging con la versione modificata.

Lo uso spesso anche quando lavoro alla base del codice karaf in quanto funziona anche per la maggior parte dei bundle di karaf.

+0

Questo non sembra funzionare per noi in Karaf 4.0.4. Il comando 'update ' funziona solo _ solo per aggiornare il pacchetto dal nostro repository maven remoto (Nexus). Successivamente, i futuri comandi di aggiornamento non fanno nulla, anche se abbiamo specificato '@ snapshotUpdate = always'. Se riavviamo Karaf, il prossimo aggiornamento funziona (solo una volta). –

+0

Questo è solo per il repository locale. Si compila lo snapshot localmente e verrà aggiornato automaticamente. Qual è il tuo caso d'uso con il repository remoto? –

+0

Abbiamo server DEV su cui vogliamo distribuire artefatti di istantanee. Per prima cosa li costruiamo usando il nostro server CI (Bamboo), che li colloca nel repository remoto Nexus. Quindi vogliamo distribuirli usando il comando 'bundle: update' di karaf shell. (O a volte usando il pulsante Aggiorna nella console Web di karaf.) Funziona per gli artefatti di rilascio, ma per gli snapshot presenta i problemi che ho descritto. –