Plug-Ins


... [ Seminar JAVA und Werkzeuge für das Web ] ... [ Thema Eclipse ] ... [ Literaturverzeichnis ] ...

Übersicht: Plug-Ins


Allgemeines

"It works better if you plug it in." (Sattinger's Law)
(Kapselung der Anwendungsmodule von der eigentlichen Runtime zur Fehlerminimierung.)

Wie bereits erwähnt, bestimmen die einzelnen Plug-Ins den Funktionsumfang und die Mächtigkeit des Gesamtsystems. Alles weitere Wissenswerte über sie soll nun beschrieben werden.

Alle Plug-Ins werden direkt in JAVA programmiert. Das erlaubt die von JAVA bekannte Plattformunabhängigkeit und verhindert doppelte Entwicklung für unterschiedliche Betriebssysteme. Bei jedem Programmstart untersucht die Applikation das Plug-In-Verzeichnis von Eclipse ("\..\PLUG-IN\") nach vorhandenen Plug-Ins und registriert diese in der Plug-In-Registry. Um die Speichernutzung und Laufzeitbelastung so gering wie möglich zu halten, werden sie jedoch erst bei ihrem ersten Gebrauch initialisiert. (Diese Funktionsweise verhindert das Auftreten von Fehlern bei der Aktivierung fehlerhafter Plug-Ins, obwohl diese evtl. niemals gebraucht würden.) Es sind vorher also nur ihre Funktionen und gegenseitigen Wechselwirkungen bekannt, die dem System über die sog. "Manifest-Datei" plugin.xml mitgeteilt werden. Darin werden u.a. Extensions (Erweiterungen anderer Plug-Ins) und Extension Points (eigene Punkte, an denen andere Plug-Ins ansetzen können, um die eigene Funktionalität zu erweitern) definiert. Somit wären Extensions vergleichbar mit Steckern, die in die Steckdosen (Extension Points) anderer Plug-Ins eingeführt werden.

Neben der Manifest-Datei besteht ein Plug-In noch aus weiteren Bestandteilen:
Um ein Plug-In für das System sichtbar zu machen, muss es als eigenes Unterverzeichnis im Ordner "\..\PLUG-IN\" abgelegt werden (s.o.). Dieser Verzeichnisname ist fest vorgegeben und darf nicht geändert werden.


Beispiel: Aufbau einer Manifest-Datei

Es sollen nun an folgender Beispiel-Manifest-Datei die wichtigsten XML-Tags kurz erläutert werden. Es handelt sich dabei um ein Plug-In, dass einen neuen Menüpunkt erzeugt. Bei einem Klick auf diesen erscheint ein Fenster mit dem Inhalt "Hallo Welt!".

  1. <?xml version="1.0"?>
  2. <plugin
  3. id="org.eclipse.examples.helloworld"
  4. name="Eclipse Hello World Example"
  5. version="1.0.0"
  6. provider-name="HUGO"
  7. <runtime>
  8. <library name="helloworld.jar"/>
  9. </runtime>
  10. <requires>
  11. <import plugin="org.eclipse.ui"/>
  12. </requires>
  13. <extension point="org.eclipse.ui.actionSets">
  14. <actionSet label="Hello World" visible="true"
  15. id="org.eclipse.examples.helloworld.HelloWorldActionSet"
  16. description="Action set for Hello World example">
  17. <menu label="Samples" id="org.eclipse.examples.helloworld.HelloWorldMenu">
  18. <separator name="Samples">
  19. </separator>
  20. </menu>
  21. <action label="Hello World" icon="icons/helloworld.gif"
  22. class="org.eclipse.examples.helloworld.HelloWorldAction"
  23. tooltip="Hello, World"
  24. menubarPath="org.eclipse.examples.helloworld.HelloWorldMenu/samples"
  25. toolbarPath="Normal"
  26. id="org.eclipse.examples.helloworld.actions.HelloWorldAction">
  27. state="true"
  28. </action>
  29. </actionSet>
  30. </extension>
  31. </plugin>

Zu Beginn definiert man die allgemeinen Eigenschaften des Plug-Ins. Die ID gibt Auskunft darüber, mit welchem Namen dieses Plug-In von anderen Plug-Ins referenziert werden kann. Außerdem muss dass Plug-In-Unterverzeichnis den gleichen Namen haben, damit das System es auffinden kann. Der Name kann vom Autor frei gewählt werden,ebenso die Versionsnummer. Als Provider-Name kommt der Autor oder das Unternehmen in Frage, welche(r) das Plug-In zur Verfügung stellt.

Innerhalb des <runtime>-Tags wird als Library Name der Name des .jar-Archivs angegeben. Das <requires>-Tag gibt die Plug-Ins an, die für den fehlerfreien Betrieb des Plug-Ins notwendig sind. Neben dem hier angegebenen org.eclipse.ui, das für das Aussehen der Oberfläche zuständig ist, sind hier meistens einige Laufzeit-Plug-Ins aufgeführt.

Zuletzt werden die Erweiterungen der Extension Points definiert. Die ActionSets sind für das Hinzufügen oder Entfernen von Menüpunkten im Hauptmenü oder der Toolbar zuständig. In dem angegebenen Paket "org.eclipse.ui.actionSets" werden die Interfaces definiert, die von unserem Plug-In implementiert werden müssen. Eine Liste der verfügbaren Interfaces kann in der Hilfe nachgeschlagen werden. Jedes definiert Methoden, um ein Plug-In ganz spezielle Aktionen ausführen zu lassen. In unserem Beispiel sorgt das Interface "IWorkbenchWindowActionDelegate" für gute Laune, das zwei Methoden definiert. Beachtet werden müssen evtl. vorhandene Vererbungshierarchien.

Der weitere Aufbau des <extension>-Tags teilt sich in zwei Teile auf. Im <menu>-Tag werden die Eigenschaften des Hello-World- Menüpunktes beschrieben (Bsp.: Erstellen eines neuen Menüpunktes mit der Bezeichnung "Samples"), im <action>-Tag die Eigenschaften des neuen Toolbar-Eintrages (Bsp.: Das anzuzeigende Icon oder der Tooltip, der beim Verharren auf dem Icon angezeigt werden soll). Die Aktionen, die beim Klick auf den neuen Menüpunkt ausgeführt werden sollen, werden in der zum Plug-In dazugehörenden .java-Datei definiert. Hier ein Ausschnitt aus dem Quellcode:

  1. // Import-Declarations
  2. ...
  3. // IWorkbenchWindowActionDelegate ist das zu implementierende Interface
  4. // aus org.eclipse.ui.actionSets
  5. public class HelloWorldAction implements IWorkbenchWindowActionDelegate {
  6. // IWorkbenchWindow ist der Ancestor von IWorkbenchWindowActionDelegate
  7. IWorkbenchWindow activeWindow = null;
  8. public void init(IWorkbenchWindow window) {
  9. activeWindow = window;
  10. }
  11. // Beim Aufruf dieses Plug-Ins soll ein neuen Shell-Fenster geöffnet werden,
  12. // in dem die angegebene Message angezeigt werden soll
  13. public void run(IAction proxyAction) {
  14. Shell shell = activeWindow.getShell();
  15. MessageDialog.openInformation(shell, "Hallo Welt", "Hello World!");
  16. }
  17. // weitere Interface-Klassen
  18. ...
  19. }

Wir sehen, dass bei einem Aufruf der run-Methode ein neues Shell-Fenster erzeugt wird, in dem die Message "Hello World!" unter dem Fenstertitel "Hallo Welt" angezeigt wird.

Anmerkung: Die in der XML-Datei verwendeten Tags werden durch eine eigene DTD-Datei definiert.


Die PDE - Plug-In Development Environment

Um die Entwicklung von Plug-Ins zu vereinfachen, wird Eclipse mit der PDE geliefert. Diese nimmt dem Entwickler viel Programmierarbeit ab und reduziert die eigene Arbeit auf ein Minimum. So lässt sich das oben beschriebene Hello-World-Plug-In innerhalb von einer Minute ohne eigenen Programmieraufwand erstellen. Das PDE stellt u.a. mehrere Plug-In-Wizards zur Verfügung:
Hierzu sei angemerkt, dass der Wizard jeweils ein ganz spezielles Beispiel generiert (z.B. einen XML-Editor für den ersten Fall), die jeweiligen Anpassungen hin zur gewünschten Funktionalität muss der User selber vornehmen.

Auffallend ist die große Anzahl an JAVA-Dateien, die bereits für eine kleine Aufgabe generiert und benötigt werden, so dass man bei größeren Projekten sicher leicht den Überblick verlieren kann. Dazu beitragen tut auch die Vielzahl an definierten Interfaces (hier: Extension Points), aus deren Masse es nicht immer einfach ist, sich die wirklich wichtigen und benötigten herauszusuchen.

Die Manifest-Datei muss innerhalb der PDE nicht von Hand geschrieben werden. Nach Auswahl eines Plug-In-Typs über den Wizard werden alle dafür notwendigen jar-Archive, Interfaces usw. direkt in das Projekt einbezogen und die Manifest-Datei, so weit es geht, vervollständigt. Nur die Änderungen, die über den Umfang hinausgehen, die der jeweilige Wizard anbietet, müssen vom Anwender direkt vorgenommen werden. Dazu bietet die PDE dem Benutzer eine grafische Oberfläche zum Anlegen von Extensions und Extension Points sowie zur Einbindung neuer jar-Archive an. Die folgende Abbildung zeigt die Oberfläche der PDE:



Zur Erstellung eines neuen Plug-Ins muss bei der Erstellung eines neuen Projektes einfach als Ziel "Plug-in Development -> Plug-in Project" angegeben werden und der Wizard erscheint. Nach Abschluss der Eingaben wird der Perspektivenliste auf der linken Seite des Fensters die Plug-In-Perspektive hinzugefügt.

Zum Testen der Plug-Ins bietet sich der Start einer zweiten Laufzeitumgebung an. Dies wird erreicht durch den Aufruf "Run -> Run-time Workbench".


... [ Seminar JAVA und Werkzeuge für das Web ] ... [ Thema Eclipse ] ... [ Plug-Ins ] ... [ Literaturverzeichnis ] ...