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:
- JAR-Archiv mit den ausführbaren .class-Dateien
- HTML-Help-Files
- benötigte Ressourcen wie Bilder, Soundfiles, etc.
- Quellcodedateien, um dem OpenSource-Gedanken gerecht zu werden
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!".
- <?xml version="1.0"?>
- <plugin
- id="org.eclipse.examples.helloworld"
- name="Eclipse Hello World Example"
- version="1.0.0"
- provider-name="HUGO"
- <runtime>
- <library name="helloworld.jar"/>
- </runtime>
- <requires>
- <import plugin="org.eclipse.ui"/>
- </requires>
- <extension point="org.eclipse.ui.actionSets">
- <actionSet label="Hello World" visible="true"
- id="org.eclipse.examples.helloworld.HelloWorldActionSet"
- description="Action set for Hello World example">
- <menu label="Samples" id="org.eclipse.examples.helloworld.HelloWorldMenu">
- <separator name="Samples">
- </separator>
- </menu>
- <action label="Hello World" icon="icons/helloworld.gif"
- class="org.eclipse.examples.helloworld.HelloWorldAction"
- tooltip="Hello, World"
- menubarPath="org.eclipse.examples.helloworld.HelloWorldMenu/samples"
- toolbarPath="Normal"
- id="org.eclipse.examples.helloworld.actions.HelloWorldAction">
- state="true"
- </action>
- </actionSet>
- </extension>
- </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:
- // Import-Declarations
- ...
-
- // IWorkbenchWindowActionDelegate ist das zu implementierende Interface
- // aus org.eclipse.ui.actionSets
- public class HelloWorldAction implements IWorkbenchWindowActionDelegate {
-
- // IWorkbenchWindow ist der Ancestor von IWorkbenchWindowActionDelegate
- IWorkbenchWindow activeWindow = null;
-
- public void init(IWorkbenchWindow window) {
- activeWindow = window;
- }
-
- // Beim Aufruf dieses Plug-Ins soll ein neuen Shell-Fenster geöffnet werden,
- // in dem die angegebene Message angezeigt werden soll
- public void run(IAction proxyAction) {
- Shell shell = activeWindow.getShell();
- MessageDialog.openInformation(shell, "Hallo Welt", "Hello World!");
- }
-
- // weitere Interface-Klassen
- ...
-
- }
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:
- zur Erstellung eines Editors für Dateien wählbaren Typs
- zur Erstellung von PopUp-Menüs
- zur Erstellung von Eigenschafts-Fenstern für alle Datentypen
- zur Erstellung neuer Views
- zur Erweiterung von Perspektiven
- zur Erstellung von Hallo-Welt-Fenstern
- Custom-Plug-Ins
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 ] ...