Bedeutung des Hauptmanifestattributs in einer selbstausführenden JAR

1. Übersicht

Jede ausführbare Java-Klasse muss eine Hauptmethode enthalten . Einfach ausgedrückt ist diese Methode ein Ausgangspunkt für eine Anwendung.

Um unsere Hauptmethode aus einer selbstausführenden JAR-Datei auszuführen, müssen wir eine geeignete Manifestdatei erstellen und diese zusammen mit unserem Code packen. Diese Manifestdatei muss ein Hauptmanifestattribut haben, das den Pfad zu der Klasse definiert, die unsere Hauptmethode enthält.

In diesem Tutorial zeigen wir, wie eine einfache Java-Klasse als selbstausführende JAR gepackt wird und wie wichtig ein Hauptmanifestattribut für eine erfolgreiche Ausführung ist.

2. Ausführen einer JAR ohne das Hauptmanifestattribut

Um praktischer zu werden, zeigen wir ein Beispiel für eine nicht erfolgreiche Ausführung ohne das richtige Manifestattribut.

Schreiben wir eine einfache Java-Klasse mit einer Hauptmethode:

public class AppExample { public static void main(String[] args){ System.out.println("AppExample executed!"); } } 

Um unsere Beispielklasse in ein JAR-Archiv zu packen, müssen wir zur Shell unseres Betriebssystems gehen und sie kompilieren:

javac -d . AppExample.java 

Dann können wir es in ein Glas packen:

jar cvf example.jar com/baeldung/manifest/AppExample.class 

Unsere example.jar enthält eine Standardmanifestdatei. Wir können jetzt versuchen, die JAR auszuführen:

java -jar example.jar 

Die Ausführung schlägt mit einem Fehler fehl:

no main manifest attribute, in example.jar 

3. Ausführen einer JAR mit dem Hauptmanifestattribut

Wie wir gesehen haben, konnte JVM unser Hauptmanifestattribut nicht finden. Aus diesem Grund konnte unsere Hauptklasse mit unserer Hauptmethode nicht gefunden werden.

Fügen wir zusammen mit unserem Code ein geeignetes Manifestattribut in die JAR ein. Wir müssen eine MANIFEST.MF- Datei erstellen, die eine einzelne Zeile enthält:

Main-Class: com.baeldung.manifest.AppExample 

Unser Manifest enthält jetzt den Klassenpfad zu unserer kompilierten AppExample.class .

Da wir unsere Beispielklasse bereits kompiliert haben, müssen Sie sie nicht erneut ausführen.

Wir packen es einfach zusammen mit unserer Manifestdatei:

jar cvmf MANIFEST.MF example.jar com/baeldung/manifest/AppExample.class 

Dieses Mal wird JAR wie erwartet ausgeführt und gibt Folgendes aus:

AppExample executed!

4. Fazit

In diesem kurzen Artikel haben wir gezeigt, wie eine einfache Java-Klasse als selbstausführende JAR gepackt wird, und an zwei einfachen Beispielen die Bedeutung eines Hauptmanifestattributs demonstriert.

Der vollständige Quellcode für das Beispiel ist auf GitHub verfügbar. Dies ist ein Maven-basiertes Projekt, sodass es importiert und unverändert verwendet werden kann.