2013-02-16 19 views
8

Sto cercando di capire la differenza tra il seguenteOSGI Bundle vs vaso dipendenza

<dependency> 
     <groupId>com.myspace.order</groupId> 
     <artifactId>dal</artifactId> 
     <version>1.0.0-SNAPSHOT</version> 
    </dependency> 

E

<dependency> 
     <groupId>com.myspace.order</groupId> 
     <artifactId>dal</artifactId> 
     <version>1.0.0-SNAPSHOT</version> 
     <type>bundle</type> 
    </dependency> 

L'dal manufatto stesso ha specificato come imballaggio fascio come:

<packaging>bundle</packaging> 

Ora quando distribuisco l'artefatto dal, lo vedo pubblicato nel repository come un barattolo (con un manifest all'interno di esso). In questo caso, quale dovrebbe essere la mia dipendenza dal. Dovrebbe essere di tipo bundle o jar? Se sto facendo OSGI, suppongo che il modo sarebbe quello di avere il tipo specificato come pacchetto. È corretto? Oppure posso semplicemente avere una dipendenza da jar qui?

risposta

11

Quando si dichiara una dipendenza in Maven, è possibile dipendere solo da un normale Jar, non da un bundle, poiché Maven non riconosce le restrizioni dell'ambiente OSGi.

Vedere questa domanda: (! Ma dovrebbe)

Why can't maven find an osgi bundle dependency?

Al momento si compila il progetto, non è necessario preoccuparsi per l'ambiente OSGi ancora ... per esempio, lo farà non ti lamenti se provi a utilizzare i pacchetti non esportati dal pacchetto che stai utilizzando ....

Quando provi a distribuire il tuo pacchetto all'interno di un contenitore OSGi, se hai dichiarato correttamente le tue dipendenze dai pacchetti 'dal' tu usi, compresa ovviamente la versione (che di solito dovresti lasciare per il plugin di maven-bundle) basato sul tuo POM), verrà risolto solo se nel contenitore è presente un pacchetto che esporta i pacchetti richiesti nella versione corretta (o nell'intervallo di versione).

Considerando che 'dal' sembra essere già un pacchetto, devi solo assicurarti di distribuire il tuo bundle e 'dal' insieme e tutto funzionerà correttamente.

Tuttavia, se per sbaglio aggiunto una dipendenza su un pacchetto privato di 'dal', anche se Maven sarà lieto di compilarlo per voi, quando gettato in OSGi sarete accolti da un'eccezione cablaggio brutto :)

Si noti che un bundle è solo un normale jar che contiene i metadati OSGi nel file manifest (Bundle-SymbolicName, Bundle-Version ecc.). Quindi se non usi OSGi, un bundle funzionerà come qualsiasi altro jar.

Ma comunque, se si vuole un po 'di informazioni, controllare questa domanda:

What is the meaning of type "bundle" in a maven dependency?

+0

", per esempio, esso non lamentarsi se si tenta di utilizzare i pacchetti non esportati dal fascio che stai a seconda .... " Ciò significa che le dipendenze OSGI vengono applicate (e rilevate) in fase di esecuzione? Stavo pensando che il pacchetto di esportazione sia stato verificato al momento della compilazione. – Sudoer

+1

Le dipendenze verranno RISOLTE quando si installa il pacchetto nel contenitore OSGi. Poiché OSGi è un ambiente dinamico, è possibile installare un pacchetto in qualsiasi momento ... Se il pacchetto raggiunge lo stato RISOLTO, può essere avviato. In altre parole, l'installazione è una sorta di compilazione dinamica ... se il bundle lo supera, è garantito che al momento dell'installazione tutte le importazioni siano state soddisfatte, quindi il bundle può iniziare. – Renato

+1

Non è possibile che OSGi possa risolvere le dipendenze del bundle prima di provare effettivamente a installarlo perché ciò dipenderà dal set di bundle disponibili al momento dell'installazione.Maven, d'altra parte, usa la normale procedura di compilazione Java, ignorando le regole di visibilità di OSGi ... questa è la differenza principale. – Renato

Problemi correlati