Apache Maven - Ausführbare JAR-Dateien (Permalink)

Im dritten Teil unserer Serie über Apache Maven (Teil 1, Teil 2) soll das Programm nicht nur mit mvn exec:java -Dexec.mainClass="b1.Main" gestartet werden können sondern auch mit java -jar Datei.jar.

Maven Shade PlugIn

Das Maven Shade PlugIn erlaubt das Erstellen einer JAR-Datei, welches alle Abhängigkeiten des Projektes beinhaltet und die Manifest-Datei entsprechend anpasst.

Zum Einsatz muss die pom.xml erneut erweitert werden:

<project ...>
    ...
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>1.4</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <transformers>
                                <transformer
                                  implementation="org.apache.maven.
                                  plugins.shade.resource.
                                  ManifestResourceTransformer">
                                    <mainClass>b1.Main</mainClass>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            ...
        </plugins>
    </build>
    ...
</project>

Führt man nun ein mvn package aus, so werden alle abhängigen JAR-Dateien in ein temporäres Verzeichnis ausgepackt, eine entsprechend dem Eintrag Main-Class in der Manifest-Datei.

Anschließend kann über java -jar target/basics1-0.1.jar das Programm gestartet werden.

Résumé

Natürlich ist die so erstellte JAR-Datei größer als die aus dem letzten Teil, da die komplette JLine-Bibliothek mit eingepackt wurde. Dies ist aber notwendig um die JAR-Datei ausführen zu können. Weitere Informationen zum Maven Shade Plugin findet man hier.

Update 23. Juli 2013

Die Quellen zu diesem Artikel kann man nun auch bei GitHub herunterladen oder forken.

Update 5. Juni 2018

Die Quellen zu diesem Artikel findet man jetzt unter https://git.lusiardi.de/jlusiardi/MavenExecutableJarFiles. Maven 3.3 kann in einem Docker-Container mit folgendem Kommando zum Build benutzt werden:

docker run -it --rm -v "$(pwd)":/usr/src/mymaven   
 -w /usr/src/mymaven maven:3.3-jdk-8 mvn clean install