2010-12-26 6 views
7

erfordert Beim Erstellen eines Eclipse-Plugin (lato sensu), die aus mehreren Plugins und einem Merkmal besteht, habe ich zwei Möglichkeiten zur Angabe Abhängigkeiten:Erfordern-Bundle und Import-Package gegen feature.xml

  • in die Plugins selbst, mit Require-Bundle und Import-Package in META-INF/MANIFEST.MF;
  • in der Datei feature.xml von der Funktion.

In meinem Verständnis, sollte es genug sein, um die Abhängigkeiten auf der unteren Ebene zu erklären, heißen in dem Plugins. Warum haben wir noch den feature.xmlrequires Mechanismus?


aktualisieren: feature.xml description in the Eclipse Help

Antwort

6

Es ist falsch, Feature-zu-Feature-Abhängigkeitsmechanismen als Legacy zu kategorisieren.Es stimmt zwar, dass mit dem Erscheinen von p2 Abhängigkeiten, die über das Bundle-Manifest "Require-Bundle" oder "Import-Package" angegeben werden, installiert werden, aber das Ergebnis ist möglicherweise nicht das, was Sie erwarten.

Betrachten Sie den Fall, in dem Sie eine Erweiterung für JDT erstellen. Angenommen, Sie sind nur von JDT core api abhängig (keine UI-Erweiterungen). Wenn Sie sich nur auf OSGi-Abhängigkeiten verlassen, installiert p2 beim Installieren Ihres Plugins pflichtgemäß das JDT-Kernpaket, nicht aber das UI-Bundle. Aus Sicht von OSGi perfekt, aber wahrscheinlich nicht das, was Sie vorhaben.

Ich empfehle, mit Feature-Import zu bleiben, um Ihre Abhängigkeiten auf hoher Ebene zu beschreiben, um sicherzustellen, dass sie vollständig installiert sind. Sich nur auf OSGi-Abhängigkeiten zu verlassen, funktioniert am besten für freischwebende Bundles, die nicht Teil von etwas Größerem sind, das als eine Einheit installiert werden sollte.

3

Eclipse-Feature ist die Vorstellung, die Plug-In verwalten höheren abstrakt zu liefern.

Zum Beispiel gibt es mehr als zwanzig Plug-Ins für C/C++ - Entwicklungstools, daher verfügt CDT über mehrere Funktionen zum Organisieren dieser Plug-Ins in abstrakterer Ebene, für Kernfunktionen, ui, Build und so weiter.

Es hilft auch den Installationsprozess zu vereinfachen, Benutzer müssen nur die Top-Funktion (mit freundlicher Name) von CDT kennen. P2 API oder klassische Installation verwalten finden Sie die Plug-Ins und Unterfunktionen einschließlich der Top-Funktion, dann installieren Sie sie.

Die Funktion konnte jedoch nicht helfen, ein hohes Modulsystem zu erstellen, da sie selbst keine Funktionalität bietet. Es ist kein Teil der OSGi-Spezifikation, es wurde von Eclipse 2.x oder einer älteren Version übernommen.

Das Bundle ist das Wesentliche von OSGi. Gemäß der Spezifikation könnte jedes Bündel andere Klassen außer der Deklaration der Leitung mit dem Paket von Klassen verwenden. Require-Bundle und Import-Package sind die Möglichkeiten, die Drähte zu erstellen.

In einem kurzen Wort, Feature und Plug-in sind völlig unterschiedliche Begriffe. Feature einschließlich Plug-Ins macht verschiedene Dinge im Vergleich zu Import-Paket Paket.

Update:

Das erfordert Tag von feature.xml das Erbe ist. Die Absicht besteht darin, dass die Definition der Abhängigkeiten dieser Funktion mit anderen Plug-Ins/Funktionen Update-Manager, um die kaputten Abhängigkeiten zu finden bei der Installation oder diese Funktion zu aktualisieren. Es definiert die Abhängigkeiten dieses Features mit anderen Plug-Ins, es wird jedoch vom Update-Manager zum Installieren oder Aktualisieren verwendet. Import-Package des Bündels erklärt die tatsächliche und echte Abhängigkeit zwischen dem Bündel und einem anderen Modul in dem OSGi-System.

Da Eclipse p2 als Bereitstellungsmanager verwendet, muss das Tag "requires" in der Datei feature.xml nicht deklariert werden. P2 würde die Abhängigkeiten zwischen Bündel und anderen Modulen erkennen, die von ‚Import-Package‘ deklariert sind oder ‚require-Bundle‘. P2 wird Ihr Feature nicht installieren oder aktualisieren, wenn eine Abhängigkeit nicht erfüllt ist.

+0

@Robert, nicht sicher, was genau "feature.xml benötigt". Abhängigkeiten in den Features wirken sich jedoch niemals auf Ihre Anwendung aus, sie sind nicht zwingend erforderlich. Es bietet nur eine einfache Möglichkeit, diese Bundles zu organisieren, wie getaggte Box (Feature und Name) und Eier (Bundles). :) – Kane

+0

siehe mein Update. –

+0

@Robert, sehe mein Update. – Kane