Veröffentlicht am: 25.10.2011
Aktualisiert am: 27.05.2023
Von: JLusiardi
In Kategorie: Programmieren
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/mavenExecutableJarFiles-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 5. Juni 2018
Die Quellen zu diesem Artikel findet man jetzt unter https://gitea.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
Update 27. Mai 2023
Wie in den vorangegangen Teilen wurden auch hier Updates verschiedener Versionen vorgenommen.