Bereits vor einigen Wochen hatte ich hier und dort beschrieben, wie man mit Eclipse/Ant seine Anwendung per Knopfdruck automatisiert deployen kann. Da es unter manchen Windows-Systemen zu Schwierigkeiten kommt, eine Jar-Datei zu starten (bspw. nicht verknüpft mit dem Jar-Launcher) empfiehlt es sich natürlich, für jene einen kleinen Exe-Wrapper zur Verfügung zu stellen. Launch4j bietet neben dieser Funktionalität auch diverse andere Tweaks: Splashscreen, Java-Download-Hinweis, JVM-Arguments und vieles mehr. Dabei gibt es Launch4j in zwei Modi: Im Gui-Modus lassen sich alle Einstellungen konfigurieren (und testen) und anschließend speichern, im Befehls-Modus wird eben eine solche Konfigurationsdatei erwartet.

Launch4j arbeitet selber mit Ant, daher ist die Integration in bestehende Build-Tasks sehr einfach. Wahlweise konfiguriert man die Optionen direkt im Hauptbuildscript oder verwendet ein eigenes Script, welches man durch die Gui erhält.

In dem eigenen Buildscript definiert man den Task etwa mit:

<taskdef name="launch4j"
    classname="net.sf.launch4j.ant.Launch4jTask"
    classpath="${launch4j.dir}/launch4j.jar :${launch4j.dir}/lib/xstream.jar" />

wobei launch4j.dir auf das gesamte Verzeichnis zeigt (Hinweis.. es werden mindestens bin, lib und conf benötigt).

Anschließend kann mit einem beherzten <launch4j configFile"build_data/launch4j.xml" /> bereits der Prozess gestartet werden.

Beispielhafter Inhalt der build_data/launch4j.xml:

<launch4jconfig>
	<dontwrapjar>false</dontwrapjar>
	<headertype>gui</headertype>
	<jar>../deploy/Application.jar</jar>
	<outfile>../deploy/Application.exe</outfile>
	<errtitle>Please download Java 6.</errtitle>
	<cmdline />
	<chdir />
	<priority>normal</priority>
	<downloadurl>http://java.com/download</downloadurl>
	<supporturl />
	<customprocname>false</customprocname>
	<stayalive>false</stayalive>
	<manifest />
	<icon>Application_32x32.ico</icon>
	<jre>
		<path />
		<minversion>1.6.0</minversion>
		<maxversion />
		<jdkpreference>preferJre</jdkpreference>
	</jre>
</launch4jconfig>