Eclipse RCP Cross Platform Builds
Wer Rich Clients auf Basis der Eclipse Rich Client Platform (RCP) entwickelt, wird früher oder später mit zwei Problemen bzw. Anforderungen konfrontiert werden:
- zum einen stehen im Rich Client wesentlich weniger Plug-ins zur Verfügung als in Eclipse (beispielsweise fehlen, aus gutem Grund, sämtliche Plug-ins mit *IDE* im Namen)
- zum anderen soll, auch wenn die Entwicklung z.B. unter Windows stattfindet, der Rich Client für andere Zielplattformen generiert werden, ohne umständlich das Betriebssystem zu wechseln.
Die gute Nachricht ist, beide Anforderungen können umgesetzt werden. Der erste Punkt mit der Target Platform, der zweite Punkt mit dem Delta Pack. Allerdings muss der Entwickler etwas Arbeit dafür investieren.
Die klare Empfehlung ist, das gleich zu Anfang des RCP Projektes (also für jeden Workspace) zu erledigen. Dazu benötigt man das plattformabhängige Eclipse RCP SDK mit ca. 20 MB (am Besten Download des Latest Release), das man in ein leeres Verzeichnis entpackt. Der Pfad sollte keine Leerzeichen enthalten, das spart bei der Automatisierung beispielsweise mit Ant später Arbeit. Im jeweiligen Eclipse Workspace ruft man anschließend die Preferences auf und wechselt auf Plug-in Development - Target Platform. Hier wählt man mit dem Browse Button das eben angelegte Verzeichnis aus und bestätigt alle Dialoge (siehe folgenden Screenshot).

Damit wäre, nach der automatischen Neukompilierung, der erste Punkt von oben eigentlich erledigt. Allerdings ist es sehr wahrscheinlich, dass plötzlich Compilererrors auftreten und die RCP nicht mehr funktioniert. Die Ursache dafür ist logisch, es fehlen einfach noch Plug-ins (schließlich ist das RCP SDK ja auch ein ganzes Stück kleiner als beispielsweise Eclipse Classic). Jetzt gilt es die notwendigen Plug-ins zu identifizieren (z.B. per plugin.xml bzw. MANIFEST.MF oder über die Plug-in Dependencies View) und von Hand(!) aus der normalen Eclipse Installation ins Target Verzeichnis zu kopieren. Keinesfalls sollte man jetzt einfach alle Plug-ins kopieren, damit wäre der Vorteil der Target Platform dahin! Die umständliche Prozedur zwingt Entwickler vielmehr, nochmals über Plug-in Abhängigkeiten nachzudenken und manche Dinge vielleicht anders zu entwickeln (und vor allem keine IDE Abhängigkeiten in eine RCP zu bringen).
Neu hinzugefügte Plug-ins müssen immer in den Preferences (wiederum auf der Seite Target Platform) per Reload Button bekanntgemacht werden. Kommen später weitere Plug-in Abhängigkeiten hinzu ist das Vorgehen identisch. Das wiederholt man so lange bis die RCP wieder voll funktionsfähig ist.
Um jetzt noch plattformunabhängig zu werden benötigt man den Eclipse Delta Pack mit ca. 35 MB (ebenfalls auf der Latest Release Download Seite). Diese zip-Datei extrahiert man in das oben angelegte Verzeichnis für die Target Platform (identische Dateien können überschrieben werden). Damit erhält man z.B. auch unter Windows das für Linux notwendige Fragment org.eclipse.swt.gtk.linux.x86_3.4.0.v3448f.jar. Nach dem obligatorischen Klick auf den Reload Button (Preferences) fällt im RCP Export Wizard die Export for multiple platforms Option auf (siehe den nächsten Screenshot). Im Folgedialog lässt sich jetzt auswählen, für welche Plattformen ein Build erstellt werden soll.

Das Vorgehen mutet sicherlich etwas umständlich an, dafür ist jetzt die Zielplattform von der Entwicklungsumgebung entkoppelt, man kann Builds für mehrere Plattformen erstellen und stellt sicher, dass die RCP-Entwicklung nicht auf IDE-basierten Plug-ins besteht. Auch kann man jetzt die neueste Eclipse IDE zur Entwicklung verwenden und die Builds gegen eine andere Version erstellen.
Um sich das Leben später leichter zu machen lässt sich die Target Platform auf einem Netzlaufwerk erstellen und gleichzeitig von mehreren Entwicklern benutzen. Außerdem sollte man für jede zu entwickelnde RCP ein eigenes (frisches) Target Platform Verzeichnis verwenden.