2011-02-08 26 views

risposta

22

come era scritto nelle risposte precedenti ci sono due opzioni, se si desidera utilizzare le librerie aggiuntive nei bundle:

  1. embedding vasetti di libreria in un fascio in cui verrà utilizzato,
  2. la creazione di un bundle OSGi valido dalla libreria.

Il primo approccio è più semplice, perché hai solo bisogno di copiare vasi libreria (e tutte le sue dipendenze) per un pacchetto (ad esempio, in una directory root) e quindi aggiungerli alla Bundle-Classpath elemento MANIFEST.MF (vedi here) . Tuttavia, mentre si esegue questa operazione è necessario ricordare che questa libreria aggiunta sarà visibile solo in un pacchetto in cui è incorporata (quindi il riutilizzo della libreria è limitato). È sempre possibile aggiungere pacchetti da questa libreria all'elemento Export-package in MANIFEST.MF per renderlo visibile per altri pacchetti, ma questa soluzione è tutt'altro che elegante (tuttavia funzionerà).

Al fine di renderlo visibile agli altri bundle si dovrebbe usare il secondo approccio, vale a dire creare un pacchetto OSGi dalla libreria (ci sono strumenti che possono aiutare a farlo, anche in Eclipse). Tuttavia, per le librerie più complesse questo approccio potrebbe essere più difficile (a causa delle dipendenze e dell'approccio di caricamento della classe specifico in OSGi).

Quindi, se si desidera utilizzare la libreria solo in un pacchetto, suggerisco di utilizzare il primo approccio (è più semplice da implementare). Se si desidera utilizzare questa libreria in molti pacchetti nella propria applicazione, è necessario considerare il secondo approccio.

3

Sì, è possibile. Sono disponibili due opzioni:

In primo luogo, è possibile includere tutti i pacchetti dalla libreria esterna nella sezione del pacchetto privato del pacchetto. Comprenderà tutti questi pacchetti in jar con la tua applicazione. La seconda opzione consiste nel creare un bundle osgi valido dalla libreria esterna.

5

Sì, è possibile incorporare la libreria esterna nel pacchetto o racchiudere ("OSGIfy") la libreria come un bundle OSGi. Per entrambe le opzioni, Pax Construct (http://www.ops4j.org/projects/pax/construct) è un ottimo strumento.

Se la libreria esterna ha dipendenze, incorporare tutte queste in un unico pacchetto o utilizzare Pax Construct per avvolgerli in transitive.

Se è necessario scegliere tra il wrapping o l'incorporamento, prendere in considerazione la gestione delle dipendenze e il controllo delle versioni dei pacchetti. Se è necessario aggiornare la libreria esterna ed è incorporata nel proprio pacchetto di applicazioni, si rilascia sempre sia la libreria che il proprio codice. Non è inoltre possibile avere 2 versioni della libreria attive senza che sia attiva la versione 2 del bundle dell'applicazione. E inoltre ... se non si sta lavorando in un ambiente OSGi, si desidera aggiungere classi di terze parti nei propri jar dell'applicazione? Allora perché farlo in un ambiente OSGi?

Personalmente preferisco in questo caso vedere la lib esterna come una scatola nera e avvolgere la libreria e le sue dipendenze in un unico pacchetto.