Launch4j - ein leichtgewichtiger Java-Starter für Windows

Gerade habe ich ein wenig mit Launch4j (http://launch4j.sourceforge.net/) experimentiert. Es ist ein (sehr leichtgewichtiger) Wrapper für Jar-Aufrufe, d.h. es verpackt ein Jar in einer ausführbaren Windows-Datei (exe), wobei man einige sinnvolle Einstellungen vornehmen kann, z.B.:

  • Programm-Icon und Splash,
  • Programmname, der auch im Taskmanager auftaucht (statt "java"),
  • Verweis auf eine JRE, die automatisch zur Ausführung genommen wird,
  • Main-Class, Classpath-Einträge und Kommandozeilenargumente des Jars,
  • Registry-Einträge,
  • ...

Alle notwendigen Ressourcen werden in eine Exe gepackt, man muss dann nur noch eine JRE hinzupacken und alles zippen – fertig ist die Dist. Und der Overhead ist gering (in dem Zip-Archiv ist noch die 1.4er JRE enthalten):

# l myapp*<br />-rw-r--r-- 1 drue users 13983944 2008-03-18 16:42 myapp-1.0.zip<br />-rwxr-xr-x 1 drue users&nbsp; 1892105 2008-03-18 16:41 myapp.exe*<br />-rw-r--r-- 1 drue users&nbsp; 1858825 2008-03-18 16:41 myapp.jar

Hier ein Beispiel für die Konfiguration, alles XML (ich habe die Launch4J-Dateien im Untervereichnis lib/launch4j abgelegt):

&lt;launch4jConfig&gt;<br />&nbsp; &lt;dontWrapJar&gt;false&lt;/dontWrapJar&gt;<br />&nbsp; &lt;headerType&gt;gui&lt;/headerType&gt;<br />&nbsp; &lt;jar&gt;myapp.jar&lt;/jar&gt;<br />&nbsp; &lt;outfile&gt;myapp.exe&lt;/outfile&gt;<br />&nbsp; &lt;errTitle&gt;My launch4J app&lt;/errTitle&gt;<br />&nbsp; &lt;cmdLine&gt;&lt;/cmdLine&gt;<br />&nbsp; &lt;chdir&gt;.&lt;/chdir&gt;<br />&nbsp; &lt;priority&gt;normal&lt;/priority&gt;<br />&nbsp; &lt;downloadUrl&gt;http://java.com/download&lt;/downloadUrl&gt;<br />&nbsp; &lt;supportUrl&gt;&lt;/supportUrl&gt;<br />&nbsp; &lt;customProcName&gt;true&lt;/customProcName&gt;<br />&nbsp; &lt;stayAlive&gt;false&lt;/stayAlive&gt;<br />&nbsp; &lt;manifest&gt;lib/launch4j/manifest/xp-themes.exe.manifest&lt;/manifest&gt;<br />&nbsp; &lt;icon&gt;resources/myapp.ico&lt;/icon&gt;<br />&nbsp; &lt;jre&gt;<br />&nbsp;&nbsp;&nbsp; &lt;path&gt;jre&lt;/path&gt;<br />&nbsp;&nbsp;&nbsp; &lt;minVersion&gt;1.4.0&lt;/minVersion&gt;<br />&nbsp;&nbsp;&nbsp; &lt;maxVersion&gt;&lt;/maxVersion&gt;<br />&nbsp;&nbsp;&nbsp; &lt;jdkPreference&gt;preferJre&lt;/jdkPreference&gt;<br />&nbsp; &lt;/jre&gt;<br />&nbsp; &lt;splash&gt;<br />&nbsp;&nbsp;&nbsp; &lt;file&gt;resources/splash.bmp&lt;/file&gt;<br />&nbsp;&nbsp;&nbsp; &lt;waitForWindow&gt;true&lt;/waitForWindow&gt;<br />&nbsp;&nbsp;&nbsp; &lt;timeout&gt;60&lt;/timeout&gt;<br />&nbsp;&nbsp;&nbsp; &lt;timeoutErr&gt;true&lt;/timeoutErr&gt;<br />&nbsp; &lt;/splash&gt;<br />&lt;/launch4jConfig&gt;

Für die Konfiguration wird auch eine GUI mitgeliefert. Der Screenshot ist unten angehängt. Die JRE wird im Unterverzeichnis JRE erwartet.

Die Integration von Launch4J in ein Java-Projekt mit Ant und build.xml ist auch ganz einfach. Launch4J bringt einen Ant-Task mit, der im Build-Skript angemeldet werden muss:

&lt;target name=&quot;exe&quot; depends=&quot;jar&quot; description=&quot;Create a selfcontaining executable&quot;&gt;<br />&nbsp;&nbsp; &lt;taskdef name=&quot;launch4j&quot; classname=&quot;net.sf.launch4j.ant.Launch4jTask&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; classpath=&quot;${launch4j.dir}/launch4j.jar:${launch4j.dir}/lib/xstream.jar&quot; /&gt;<br />&nbsp;&nbsp; &lt;launch4j configFile=&quot;${basedir}/myapp.xml&quot; /&gt;<br />&lt;/target&gt;

Nun gibt es ja noch das EclipseNSIS-Projekt zum Erstellen eines Installers für Eclipse-Anwendungen. Der Launch4J-Ansatz kann gewählt werden, wenn für das Projekt kein Installer benötigt wird und der Aufwand für Entwicklung und Testen der Installation so minimal bleibt. Mit Launch4J liefert man ein Zip-Archiv. Und das war in einer Stunde erstellt.