MoleHillRocker's Blog :: Nerding around since 1985

To content | To menu | To search

Java Tutorials

Entries feed - Comments feed

Monday, July 27 2009

Erstellung von Eclipse-RCP Builds für verschiedene Plattformen

Um die in Eclipse entwickelte RCP-Applikation erfolgreich exportieren zu können sind einige Schritte notwendig, die zwar relativ einfach, aber leider meist schlecht dokumentiert sind. Nach vielen Versuchen habe ich es endlich geschafft und will der Öffentlichkeit dieses Wissen natürlich nicht vorenthalten. ;-)

 

Target-Platform einrichten

Die Target-Platform ist ein Eclipse-build, der zum Kompilieren der eigenen RCP-Applikation nötig ist. Meines Wissens nach kann auch eine gewöhnliche Eclipse-Installation (Jave, JEE, Classic, etc.) als Target-Platform verwendet werden, allerdings kann es dann passieren dass nicht notwendige Plugins in die eigene Applikation integriert werden. Aus diesem Grund verwende ich den build Eclipse Platform Runtime Binary, der im Prinzip eine schlanke Eclipse IDE darstellt ohne jegliche Funktionalität. Dies lässt sich am einfachsten nachvollziehen wenn man sich den Vergleich der einzelnen Packages auf der Eclipse Website ansieht und sich ein weiteres vorstellt, welches bei keiner Komponente einen Haken hat.

Damit die eigene Applikation nicht nur auf Plattformen die dem eigenen OS entsprechen läuft, gibt es das sogenannte Delta-Pack. Das Delta-Pack ist eine Sammlung von OS-spezifischen Plugins (Linux, Windows, Mac), die es dem eigenen Eclipse ermöglichen, die RCP-Applikation auch für fremde Betriebssysteme zu exportieren.

 

Die beiden Dateien können unter http://download.eclipse.org/eclipse/downloads/ heruntergeladen werden. Dabei sollte man beachten

  1. die zum eigenen Betriebssystem passende Version auszuwählen
  2. das zur eigenen Eclipse-Version passende Release auszuwählen (z.B. Eclipse 3.5M6)

Also zum Beispiel für Linux

  1. eclipse-platform-3.5M6-linux-gtk.tar.gz
  2. eclipse-3.5M6-delta-pack.zip

Nach dem Download müssen beide Dateien in einen gemeinsamen Ordner entpackt werden:

  1. Entpacke Platform Runtime Binary (ergibt einen Ordner "eclipse")
  2. Entpacke das DeltaPack in den bereits entpackten Ordner "eclipse" der Platform Runtime Binary und bestätige evtl. Meldungen zum Überschreiben von Dateien.

 


Eclipse konfigurieren

Im Anschluss muss man in seiner eigenen Entwicklungsumgebung die erstellte Target Platform angeben:

Eclipse -> Window -> Preferences -> Plug-in Development -> Target Platform

 

Nun kann man in der Datei myApp.product unter dem Reiter Dependencies auf Add required Plugins klicken. Daraufhin sollten einige Plugins zur vorhandenen Liste hinzukommen, vor allem die OS-spezifischen des Delta-Packs, wie z.B.

  • org.eclipse.swt.carbon.macosx
  • org.eclipse.swt.gtk.linux.ppc 
  • org.eclipse.swt.gtk.linux.x86
  • org.eclipse.swt.gtk.linux.x86_64
  • org.eclipse.swt.gtk.solaris.sparc
  • etc.


Applikation exportieren

Um die Applikation zu exportieren, wechselt man in der Datei myApp.product zum Reiter Overview, wo sich oben rechts das Export-Icon befindet. Durch die Installation des Delta-Packs gibt es nun die Option, die eigene Applikation für mehrere Plattformen zu exportieren (Export for multiple platforms). Wird hier ein Haken gesetzt, kann man auf der nächsten Seite des Wizards die gewünschten Plattformen auswählen. Ein letzer Klick auf Finish und die Applikation wird in das angegebene Verzeichnis exportiert.

Signieren einer JAR-Datei

JAR-Dateien lassen sich mit den Tools keytool und jarsigner relativ komfortabel selbst signieren. Eine Signatur ist notwendig, um die Anwendung per Java Web Start verteilen zu können. Die beiden Tools sind über die Kommandozeile bedienbar und befinden sich im Java Development Kit (JDK) unter $JAVA_HOME/jdkx.x.x_xx/bin/.


Um eine JAR Datei signieren zu können, muss diese erst erstellt werden. Dies lässt sich heutzutage relativ einfach über eine Export-Funktion der jeweiligen Entwicklungsumgebung machen. Für Eclipse existiert zusätzlich ein Plugin mit dem Namen FatJar. FatJar bindet im Projekt enthaltene zusätzliche JARs automatisch in das zu exportierende JAR ein, sodass man am Ende ein einziges ausführbares JAR hat.


Für die Verwendung per Java Webstart muss dieses JAR anschliessend signiert werden, damit es sich später auf der Festplatte des Users ausführen lässt.
Hierfür muss zuerst ein Zertifikat erstellt werden, mit welchem sich dann das JAR signieren lässt. Besteht eine Anwendung aus mehreren JARs, müssen diese alle mit demselben Zertifikat signiert werden.

 

Um ein Zertifikat zu erstellen, ruft man das keytool mit dem folgenden Befehl in der Kommandozeile auf:Anmerkung: Der Wert für den Parameter validity (Gültigkeit) wird in Tagen angegeben.

keytool -genkey -validity 365 -keyalg rsa -alias meinKey

 

Beim Ausführen dieser Zeile erfolgt eine Abfrage des Keystore-Passwortes. Erscheint sie zum ersten Mal, ist noch kein Passwort vergeben und man kann frei eines wählen. Danach stellt das Keytool eine Reihe von Fragen wie Name, Organisation, Herkunftsland etc. Diese Angaben tauchen später auch wieder in dem nun zu erstellenden Zertifikat auf. Anschliessend exportiert man das Zertifikat durch den nachfolgenden Befehl. Dies ermöglicht es, mehrere JARs mit demselben Zertifikat zu signieren.

keytool -export -alias meinKey -file meinZertifikat

 

Nun kann das JAR mit dem folgenden Befehl signiert werden:

jarsigner meinJar.jar meinKey

 

Um die Signierung zu überprüfen, lässt sich der jarsigner abermals mit veränderten Parametern verwenden:

jarsigner -verify -verbose -certs meinJAR.jar

 

Sollen mehrere JARs mit dem gleichen Zertifikat signiert werden, so führt man einfach Schritt 3 mehrmals aus. Sind alle JARs signiert, kann man die Anwendung online stellen. Der Benutzer wird beim Start der Anwendung gefragt, ob er dem Zertifikat zustimmt oder nicht. Falls ja, so wird die Applikation heruntergeladen und ausgeführt.

Java Web Start

Java Web Start ist eine Technik von Sun Microsystems, die es ermöglicht, Java-Anwendungen über das Internet mit nur einem Klick zu starten. Im Unterschied zu Java-Applets benötigen Java-Web-Start-Anwendungen jedoch keinen Browser, um ablaufen zu können. Sie sind quasi vollwertige Desktop-Applikation die per Klick gedownloadet werden.

Nach erfolgreichem Download wird die Applikation automatisch gestartet. Wurde die Deskriptor-Datei (Java Network Launching Protocol, JNLP) entsprechend konfiguriert, kann die Applikation zukünftig direkt lokal über ein entsprechendes Shortcut gestartet werden und eine Verbindung zum Internet ist nicht mehr notwendig. In der JNLP Datei kann jedoch festgelegt werden, dass beim Starten des Programmes zuerst im Internet ermittelt wird, ob eine neuere Version der Applikation vorliegt. Falls ja, so wird diese gedownloadet und gestartet, andernfalls wird die lokale Version verwendet.

Um eine Anwendung per Java Webstart Technologie zu veröffentlichen müssen sämtliche JAR-Dateien digital signiert werden. Näheres hierzu im Tutorial „keytool und jarsigner“.

Anschliessend erstellt man eine JNLP-Datei welche später auch die Anwendung herunterlädt und initialisert.


Beispiel einer JNLP-Datei:

<?xml version="1.0" encoding="utf-8"?>
<!-- Codebase kann lokale Adresse oder URL sein. Der Pfad muss absolut sein! -->
<jnlp spec="1.6+" codebase="file:///C:/jws_example" href="/example.jnlp">   
<information>       
<title>Titel</title>
<vendor>Hersteller</
vendor>
<homepage href="/." />
<description>Hier steht die Beschreibung</
description>
<description kind="short">Hier steht eine ausführlichere Beschreibung</description>       
<!-- Icon oben rechts im Fenster während des Downloads -->       
<icon href="/i
con.png"/>       
<!-- Splashscreen während des Ausführens der Anwendung -->       
<icon kind="
splash" href="/splash.png" />       
<!-- Shortcuts -->       
<shortcut online="true">           
<!-- Shortcut auf dem Desktop anlegen -->           
<desktop/>           
<!-- Eintrag im Startmenü anlegen -->           
<menu submenu="BeispielApplikation"/
>       
</shortcut>       
<!-- Offline-Verwendung der Applikation erlauben -->       
<offline-allowed/
>   
</information>   
<!-- Benötigte Ressourcen -->   
<resources>       
<!-- JRE 1.6 oder höher -->       
<j2se version="1.6+"/
>       
<!-- Link zur Applikation -->       
<jar href="/ExampleApp.jar" />   
</
resources>   
<!-- Rechte der Applikation -->   
<security>       
<all-permissions/>   
</
security>   
<application-desc/>
</
jnlp>