Wenn man mit Maven eine JAR-Datei baut, werden die abhängigen Bibliotheken, im Gegensatz zu WAR-Archiven, normalerweise nicht mit in das erstellte Artefakt inkludiert. Dies ist meistens auch sinnvoll, da die notwendigen Resourcen nicht mehrfach abgelegt werden sollen und bei Bedarf leicher austauschbar sind. Möchte man jedoch eine lauffähige Anwendung verbreiten, ist es zwingend notwendig, dass alle Abhängigkeiten vorhanden sind.
Als Lösung dafür sieht Maven das maven-assembly-plugin vor, welches alle Dateien (wie z.B. die Klassen-Dateien, Skripte, Property-Dateien, Bibliotheken, etc), die für einen Release notwendig sind, in einem Archiv (z.B. jar, zip, tar, gzip tar, als Verzeichnis, etc.) zusammenstellt.
Das Assembly-Plugin kann auch verwendet werden, um eine ausführbare JAR-Datei zu erstellen.
So wäre es schön, eine ausführbare JAR-Datei zu erstellen, die den eigenen Programmcode und alle Abhängigkeiten enthält.
Leider kann Java die benötigten Bibliotheken nicht aus der selben JAR-Datei laden, die auch die Main-Klasse enthält, sodass man entweder
- einen eigenen (angepassten) Class-Loader verwenden muss,
- oder alle Klassen auspacken und anschließend in eine einizige JAR-Datei verpackt (Scheidet aus, wenn man vorhandene signierte JAR-Dateien verwenden muss.)
- oder die JAR-Dateien in eine weitere JAR-Datei verpacken muss.
"Maven: JAR mit Abhängigkeiten bauen" vollständig lesen