2010-12-26 7 views
7

Quando si costruisce un plugin Eclipse (lato sensu), che consiste in più plugin e una funzione, ho due modi di dipendenze che specificano:Richiedono-Bundle e Import-Package contro feature.xml richiede

  • in i plugin stessi, usando Require-Bundle e Import-Package in META-INF/MANIFEST.MF;
  • nel file feature.xml dalla funzionalità.

Nella mia comprensione, dovrebbe essere sufficiente per dichiarare le dipendenze al livello più basso, vale a dire nei plugin. Perché abbiamo ancora il meccanismo feature.xmlrequires?


Aggiornamento: feature.xml description in the Eclipse Help

risposta

6

Non è corretto classificare il meccanismo di dipendenza da feature a feature come legacy.Mentre è certamente vero che con l'avvento di p2, verranno installate le dipendenze specificate tramite bundle manifest Require-Bundle o Import-Package, il risultato potrebbe non essere quello che ti aspetti.

Considerare il caso in cui si sta creando un'estensione a JDT. Dite che dipendete solo da JDT core api (senza estensioni UI). Se ti affidi solo alle dipendenze OSGi, quando il tuo plugin è installato, p2 installerà il bundle core JDT, ma non il bundle dell'interfaccia utente. Perfettamente soddisfacente dal punto di vista OSGi, ma probabilmente non è quello che intendevi.

Raccomando di importare le funzionalità per descrivere le dipendenze di alto livello per accertarsi che siano installate completamente. Affidarsi solo alle dipendenze OSGi funziona meglio per i bundle fluttuanti che non fanno parte di qualcosa di più grande che dovrebbe essere installato come unità.

3

funzione Eclipse è la nozione di gestire i plug-in per fornire una maggiore astratta.

Ad esempio, ci sono più di venti plug-in per gli strumenti di sviluppo C/C++, quindi CDT ha diverse funzionalità per organizzare quei plug-in in astratto di livello superiore, per le funzionalità di base, ui, build e così via.

Aiuta anche a semplificare il processo di installazione, gli utenti devono solo conoscere la funzione principale (con nome descrittivo) di CDT. L'API P2 o la classica installazione possono trovare i plug-in e le funzionalità secondarie, incluse le funzionalità principali, quindi installarle.

Tuttavia la funzione NON può aiutare a creare un sistema ad alto modulo, perché di per sé non fornisce alcuna funzionalità. Non fa parte delle specifiche OSGi, è ereditato da Eclipse 2.x o versione precedente.

Il pacchetto è l'essenziale di OSGi. Secondo le specifiche, qualsiasi bundle non potrebbe usare altre classi oltre a dichiarare il filo con il pacchetto di classi. Require-Bundle e Import-Package sono i modi per creare i fili.

In una parola breve, funzionalità e plug-in sono nozioni completamente diverse. Funzionalità che includono plug-in stanno facendo cose diverse rispetto a Importa-pacchetto di bundle.

Aggiornamento:

Il richiede tag Feature.xml è l'eredità. L'intenzione è quella di definire le dipendenze di questa funzionalità con altri plug-in/funzionalità per aiutare il gestore aggiornamenti a trovare le dipendenze non funzionanti durante l'installazione o l'aggiornamento di tale funzionalità. Definisce le dipendenze di tale caratteristica con altri plug-in, ma viene utilizzata dal gestore aggiornamenti per l'installazione o l'aggiornamento. Import-Package of bundle dichiara la dipendenza reale e reale tra il tuo bundle e un altro modulo nel sistema OSGi.

Poiché eclipse utilizza p2 come gestore di provisioning, non è necessario dichiarare il tag 'requires' nel feature.xml. P2 riconoscerebbe le dipendenze tra il bundle e altri moduli dichiarati da "Import-Package" o "Require-Bundle". P2 non installa o aggiorna la tua funzione se una dipendenza non è soddisfatta.

+0

@Robert, non so quale sia l'esatto "richiede feature.xml". Tuttavia, le dipendenze delle funzionalità non influiscono mai sulla tua applicazione, non è obbligatoria. Fornisce semplicemente un modo semplice per organizzare questi pacchetti, come la casella con tag (funzionalità e il suo nome) e le uova (pacchetti). :) – Kane

+0

per favore vedi il mio aggiornamento. –

+0

@Robert, vedere il mio aggiornamento. – Kane