Eclipse Wizard Plugin erstellen

Eclipse stellt bereits einen Wizard zur Verfügung, um eine Wizard zu erstellen: Über New->Plug-in Development->Plug-in Project ein neues Projekt anlegen. Auf der Folgeseite habe ich dann als Target Eclipse (in Version 3.3) angegeben; das OSGi Framework habe ich nicht ganz durchschaut, jedenfalls war mein fertiges Plug-in dann nicht kompatibel. new Plugin step 3 of 5
Auf der 3 Seite sind dann die Eckdaten zu vergeben: Plug-in ID üblicherweise der package name, Version ist selbsterklärend, der Plug-in Name hat nur bezeichnenden Charakter, sollte aber sprechend ausdrücken, wofür das Plug-in steht. Der Plug-in Provider ist üblicherweise ein Teil der Webadresse z.B. eclipse.org, ibm.com oder sahits.ch. Der Activator wird benötigt, um das Plug-in zu aktivieren.
new Plugin step 4 of 5
Auf der folgenden Seite kann zwischen den verschiedenen Plug-ins ausgewählt werden. Für einen Wizard benötigen wir ein „Plug-in with multi-page editor“; Mit Editor ist letztentlich die Grafische Oberfläche des Wizards gemeint wo die Eingaben gemacht werden, wie auf gerade dieser Schritt. Multi-page besagt lediglich, dass der Wizard aus mehreren Schritten bestehen kann, aber nicht muss.
Auf den beiden letzten Seiten werden dann die Informationen für die zu erstellenden Klassen gemacht.
Nach dem Abschluss hat man bereits ein funktionsfähiges Plug-in. Um es auszutesten wählt man das Projekt an und Run As->Eclipse Application. Dies startet eine zweite Eclipse Instanz mit eigenem Workspace (ein Workspace kann gleichzeitig nur von einer Eclipse Instanz benutzt werden). Hier kann der Wizard über New->Other->Other gestartet werden.
Nun geht es daran, den Wizard mit eigenem Code zu fällen. Ein guter Einstiegspunkt ist Eclipse Plugins Exposed, Part 1: A First Glimpse
Hat man die eigene Funktionalität integriert gibt es noch etwas Schönheitspflege zu machen:

  1. Wo in der Liste soll der Wizard erscheinen? Dies wird im plugin.xml im attribut category des tags wizard geregelt. Keine Angabe verfrachtet das Element in den Ordner other. Ein String bringt es in einem Ordner mit diesem Namen unter. Aber Achtung: Wenn bereits ein Ordner mit demselben Namen existiert, gibt aller Wahrscheinlichkeit nach einen zweiten Ordner. Soll der Wizard in einem anderen Ordner erscheinen ist hier die Klasse des Wizards einzutragen.Plugin.xml
  2. Das Plug-in soll ja nicht nur einer Eclipse Instanz verfügbar sein, sondern beim Starten verfügbar sein. Dazu muss das Plug-in in das Verzeichnis eclipse/plugins. Dies jedoch nicht in der Form, wie im Projekt. Für das Plug-in wird das plugin.xml, ein jar-File der Klassen, das Verzeichnis icons und eventuell das Verzeichnis icons, zusätzlich benötigte Bibliotheken und andere Resourcen benötigt.
    Dies gibt man im Plug-in oder Manifest Editor im Tab Build ein.
    Plugin.xml Build
    Unter Runtime Information gibt man den Namen des jar files an, das erstellt werden soll. In Binary Build wird angegeben, was alles im Build enthalten sein soll. Unter Extra Classpath Entries werden zusätzliche Bibliotheken angegeben.
    Um den aktuellen Build auszuführen gibt es mehrere Möglichkeiten: 1. Über Export->Plug-in Development->Deployable plugins and features. Dies erstellt jedoch nur ein jar-file der Klassen mit dem angegebenen Namen in einem plugins Verzeichnis. 2. Wertvoller aber auch nicht ganz optimal ist der Weg über ein Ant build script. Um das build.xml zu erhalten muss das plugin.xml angewählt sein, dann PDE Tools->Create Ant Build File. Dann kann zuerst das Default Target ausgeführt werden, um das jar-File zu erhalten, sodann das target zip.plugin was ein Zip-Archiv des Ordners plugin-ID_Version erstellt und alles unter Binary Build angegebene enthält. Leider aber zusätzlich zwei Zip-Files mit den Sourcen und das Verzeichnis bin. (Dies gilt zumindest für Eclipse 3.3). Also muss hier von Hand aussortiert werden.

Das Ganze ist nicht ganz ohne deshalb hier noch ein paar Tipps:

  • Das Plug-in wird nicht geladen/aktiviert: Erst mal schauen ob das Plug-in verfügbar ist unter Help->Ablut Eclipse SDK->Plug-in Details. Um das Problem zu eruieren kann es sinnvoll sein im Manifest das LacyLoad auf false zu setzen. Dies bewirkt, dass das Plug-in beim Start von Eclipse geladen wird. Ein Blick ins Error log (Window->Show View->Error log) enthällt das Problem
  • Im Error log erscheint die Meldung „plugin does not have valid identifier“ oder „plugin does not have valid version“. Hier habe ich mir sagen lassen, dass dies mit einer JRE < 1.5 vorkommen kann. Mein Problem war ein anderes: Das Verzeichnis META-INF fehlte.
  • Wenn der Wizard gestartet werden soll erscheint die Fehlermeldung „Error loading new wizard …“ Zum einen kann es sein, dass im plugin.xml die falsche Klasse angegeben ist, oder dass das jar-file im Classpath des Plug-ins fehlt (META-INF/Manifest.mf)
  • Wenn alles nichts nützt Eclipse von der Konsole mit eclipse -clean starten. Wenn dies auch nicht funktioniert alles im Verzeichnis eclipse/configuration/.settings/ löschen.

Compiling X

While working my way throug the X instalation part of the BLFS I encountered some problems with compiling. The first problem was libXpm in the libriry chapter. It showed that several packages of the app chapter have the same problem.
The problem is something like this:
*.so: undefined reverence to ‚X….‘
this is cause by the missing library libXext. To circumvent this problem I did first the configure part and then took the offending Makefile and added ‚-lXext‘ right bevor ‚-lX11‘ in the variable LDFLAGS.

Linux from Scratch – Network

This time around the compilation and installation of the LFS procieded almost without a scratch. Perhaps that is because I used this time the stable description.
I had a problem with the network configuration. The system is on a network with DHCP so I thought I could skip the whole network configuration. Doesn’t work. That mistake I realised when wanted to ping the router. So back to the configuration. In the udev rules I decided to work with the bus. But it didn’t work out as I thought. After checking (with lspci) I figured I used the wrong ID.
But the network interface just wouldn’t work. So the problem must lie within the kernel or its lack of support for the correct networking device. Recompiled, rebooted and reconected.
It works.

Vitualisierung unter Ubuntu (7.04)

Bevor ich meinen Arbeits‘ PC auf Linux – konkret Ubuntu – umstelle, wollte ich wissen, wie die gut die Virtualisierung unter Ubuntu funktioniert. Dazu habe ich das ganze auf meinem Notebook ausprobiert. Schliesslich gibt es einige Programme, die unter Linux nicht laufen, und die ich nicht missen möchte. Daher die Idee eines Linux mit einer VM auf der ein minimales Windows läuft mit einigen wenigen Programmen.
Einige Rahmenbedingungen existieren hier einfach:

  • Prozessor: 1.4 GHz
  • Arbeitspeicher: 512 MB
  • Harddisk: 80GB
  • Linux Partition: 10GB

Die Installation von VMWare geht gut von der Hand, wenn man sich an die Installationsanleitung hält.
Ich hatte das Pech, dass ich den VMware Player installiert hatte, was die Installation des VMWare Servers stört. Daher müssen die zugehörigen Pakete erst deinstalliert werden. Leider verbleibt der Ordner /etc/vmware und das skript /etc/init.d/vmware, die mit Root Berechtigungen gelöscht werden müssen.
Initial habe ich eine Grösse von 1.5 GB für die virtuelle Disk gewählt. Dies stellte sich jedoch bereits nach 11 Security Updates als zu klein heraus. Daher musste ich das File vergrössern.
vmware-vdiskmanager -x 2gb myDisk.vmdk
Siehe dazu den Bericht Expanding a virtual VMware disk.
Unglücklicherweise muss die Partition des Betriebsystems dann selbst noch vergrössert werden.
Damit ich Daten zwischen Host und Guest Betriebsystem austauschen kann musste ich eine physikalische Platte einbinden.
VMWare physical drive
Ein solches Laufwerk wird als SCSI Laufwerk eingebunden und benötigt die VMWare Tools mit einem entsprechenden Treiber. Der Treiber kann auch separat installiert werden: http://www.vmware.com/download/server/