Bedeutung des Hauptmanifestattributs in einem selbstausführenden JAR

1. Überblick

Jede ausführbare Java-Klasse muss eine main -Methode enthalten. Einfach gesagt, diese Methode ist der Ausgangspunkt einer Anwendung.

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

In diesem Lernprogramm zeigen wir, wie Sie eine einfache Java-Klasse als selbstausführende JAR-Datei packen und die Bedeutung eines Hauptmanifestattributs ** für eine erfolgreiche Ausführung demonstrieren.

2. Ausführen einer JAR ohne das Hauptmanifestattribut

Um es praktischer zu machen, zeigen wir ein Beispiel für eine fehlgeschlagene 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 es kompilieren:

javac -d . AppExample.java

Dann können wir es in einen JAR packen:

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

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

java -jar example.jar

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

no main manifest attribute, in example.jar

3. JAR mit dem Hauptmanifestattribut ausführen

Wie wir gesehen haben, konnte die JVM unser Hauptmanifestattribut nicht finden. Aus diesem Grund konnte unsere Hauptklasse nicht gefunden werden, die unsere Hauptmethode enthält.

Fügen wir zusammen mit unserem Code ein korrektes Manifestattribut in die JAR-Datei ein. Wir müssen eine MANIFEST.MF -Datei mit einer einzelnen Zeile erstellen:

Main-Class: com.baeldung.manifest.AppExample

Unser Manifest enthält jetzt den Klassenpfad zu unserer kompilierten AppExample.class . + Da wir unsere Beispielklasse bereits zusammengestellt haben, müssen Sie dies nicht noch einmal tun.

Wir packen es einfach zusammen mit unserer Manifest-Datei:

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

Dieses Mal führt JAR wie erwartet aus 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 wir haben die Bedeutung eines Hauptmanifestattributs an zwei einfachen Beispielen gezeigt.

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