Apache Maven – Launch4j Integration (Permalink)

Im 5ten Teil der Serie über Maven (Teil 1, Teil 2, Teil 3, Teil 4) - Teil 4 wird für diesen Teil allerdings nicht benötigt, kann also überlesen werden) soll gezeigt werden, wie wiederum Maven genutzt werden kann, um automatisiert im Build-Prozess direkt ausführbare Dateien für Windows (exe) erzeugt werden können.

Launch4j

Launch4j ist ein plattform-übergreifendes Werkzeug zur Erstellung von ausführbaren EXE-Dateien für Windows. Für einmale Aktionen und zum Üben bietet Launch4j eine GUI an, diese eignet sich aber nicht zur Integration in einen Build-Prozess. Hier kann uns Maven wieder helfen.

Erweiterung der pom.xml

Zunächst muss ein (zusätzliches) pluginRepository eingebunden werden. Das Tag pluginRepositories wird nur benötigt, wenn es noch nicht vorhanden war.

<pluginRepositories>
    <pluginRepository>
        <id>launch4j-xml-plugin-repo</id>
        <name>launch4j-xml-plugin Repository for Maven</name>
        <url>
            https://launch4j-xml-plugin.googlecode.com/svn/repo
        </url>
    </pluginRepository>
</pluginRepositories>

Anschließend wird wie in Teil 3 der Build-Prozess angepasst. Dazu wird unter /project/build/plugins (dem XPath folgen) folgendes zusätzliche Plugin eingetragen. Es wird davon ausgegangen, dass

  • ein ausführbares JAR-File vorliegt
  • und dieses muss unter plugin/executions/execution/configuration/jar (XPath) angegeben werden

Die gewünschte Ergebnisdatei wird unter plugin/executions/execution/configuration/outfile (XPath) angegeben.

<plugin>
    <groupId>org.bluestemsoftware.open.maven.plugin</groupId>
    <artifactId>launch4j-plugin</artifactId>
    <version>1.5.0.0</version>
    <executions>
        <execution>
            <id>l4j-gui</id>
            <phase>package</phase>
            <goals>
                <goal>launch4j</goal>
            </goals>
            <configuration>
                <headerType>gui</headerType>
                <outfile>target/MouseMover.exe</outfile>
                <jar>target/MouseMover-0.0.1.jar</jar>
                <errTitle>MouseMover Error</errTitle>
                <icon>src/main/resources/mm.ico</icon>
                <jre>
                    <minVersion>1.5.0</minVersion>
                    <maxVersion>1.6.0</maxVersion>
                    <initialHeapSize>128</initialHeapSize>
                    <maxHeapSize>1024</maxHeapSize>
                </jre>
                <versionInfo>
                    <fileVersion>1.0</fileVersion>
                    <txtFileVersion>1.0</txtFileVersion>
                    <fileDescription>Desc</fileDescription>
                    <copyright>C</copyright>
                    <productVersion>1.0</productVersion>
                    <txtProductVersion>1.0</txtProductVersion>
                    <productName>MouseMover</productName>
                    <internalName>MouseMover</internalName>
                    <originalFilename>
                        MouseMover.exe
                    </originalFilename>
                </versionInfo>
            </configuration>
        </execution>
    </executions>
</plugin>

Nach dem nächsten Build steht euch dann an der angegebenen Stelle eine EXE (hier MouseMover.exe) zur Verfügung. Das klappt zum Glück nicht nur unter Windows, sondern auch unter Linux und Mac OS X. Aber das war auch auf der Homepage von Launch4j so angegeben.

Résumé

Launch4j ermöglicht in Verbindung mit Maven das Erstellen von EXE-Dateien ohne große Probleme. So kommen Windows-Nutzer in den Genuss direkt ausführbarer Java-Programme.

Downloads

Das Testprojekt findet sich hier und die enstandene EXE hier.

Update 6. Juni 2018

Die Quellen zu diesem Artikel findet man jetzt unter https://git.lusiardi.de/jlusiardi/MouseMover. Leider scheint der Build aktuell nicht möglich.