1312 Stimmen

Kann JAR-Datei nicht ausführen: "kein Hauptmanifestattribut"

Ich habe eine Anwendung installiert, wenn ich versuche, sie auszuführen (es handelt sich um ein ausführbares Jar), passiert nichts. Wenn ich es von der Befehlszeile ausführe mit:

java -jar "app.jar"

Ich bekomme die folgende Meldung:

kein Hauptmanifestattribut in "app.jar"

Normalerweise, wenn ich das Programm selbst erstellt hätte, hätte ich ein Hauptklassenattribut zur Manifestdatei hinzugefügt. Aber in diesem Fall, da die Datei von einer Anwendung stammt, kann ich das nicht tun. Ich habe auch versucht, das Jar zu extrahieren, um zu sehen, ob ich die Hauptklasse finden könnte, aber es gibt zu viele Klassen und keine von ihnen hat das Wort "main" in ihrem Namen. Es muss einen Weg geben, das zu beheben, denn das Programm läuft einwandfrei auf anderen Systemen.

2voto

Fan Yer Punkte 343

Da Sie MANIFEST.MF hinzugefügt haben, denke ich, dass Sie die Reihenfolge der Felder in dieser Datei berücksichtigen sollten. Meine Umgebung ist java version "1.8.0_91"

und mein MANIFEST.MF sieht hier so aus

// MANIFEST.MF
Manifest-Version: 1.0
Created-By: 1.8.0_91 (Oracle Corporation)
Main-Class: HelloWorldSwing

// Ausführen
~ java -jar HelloWorldSwing.jar
kein Hauptmanifestattribut in HelloWorldSwing.jar

Allerdings lautet dieser wie folgt:

Manifest-Version: 1.0
Main-Class: HelloWorldSwing
Created-By: 1.8.0_91 (Oracle Corporation)

//das führt normalerweise Swing aus

2voto

Ueffes Punkte 158

In meinem Fall - ich arbeite an einem Multi-Modul-Projekt - könnte ich das Problem folgendermaßen eingeführt haben:

Ich habe dies in die Eltern-POM.xml hinzugefügt, was das Problem verursacht hat. Nämlich das skip mit dem Wert true:

            org.springframework.boot
            spring-boot-maven-plugin

                true

Ich habe das Problem behoben, indem ich dieselbe Konfiguration zu den Modulen hinzugefügt habe, die als Jar verpackt werden sollten, aber den Wert von skip auf false geändert habe:

    org.springframework.boot
    spring-boot-maven-plugin
    ${spring-boot.version}

        ${project.mainClass}
        ZIP
        false

                repackage

            build-info

                build-info

1voto

RaminS Punkte 2198

Sie könnten dasselbe Problem haben wie ich. Nachdem Sie Ihre .jar-Datei erstellt haben, schreiben Sie jar xf app.jar META-INF/MANIFEST.MF. Dadurch wird eine Kopie der Datei in Ihr aktuelles Verzeichnis erstellt, damit Sie sie lesen können. Wenn es nur etwas wie folgendes sagt:

Manifest-Version: 1.0

Created-By: 1.8.0_51 (Oracle Corporation)

und keine "Main-Class"-Deklaration enthält, dann denke ich, haben Sie Ihr Problem gefunden.

Ich weiß jedoch nicht, wie man es lösen kann. Ich habe andere Leute mit ähnlichen Problemen auf StackOverflow überprüft und keine Antwort gefunden. Mit diesen Informationen können Sie jedoch möglicherweise bessere Hilfe erhalten (vorausgesetzt, Sie haben dasselbe Problem wie ich).

Bearbeitung: Ich hatte es mit einer Manifest-Datei versucht, aber es hat nicht geklappt, mein Fehler war jedoch, nur eine der Klassen beim Erstellen der Jar-Datei zu benennen. Ich habe stattdessen *.class geschrieben und es funktioniert jetzt.

Obwohl ich nicht weiß, warum es notwendig ist, eine Manifest-Datei zu erstellen. Aber ich denke, es ist in Ordnung, solange es funktioniert.

1voto

Abdelsalam Shahlol Punkte 1393

Ich hatte dieses Problem und habe es kürzlich gelöst, indem ich dies in Netbeans 8 gemacht habe (siehe das Bild unten):

Netbeans Projekt Eigenschaften

  1. Gehe zu den Eigenschaften deines Projekts.
  2. Klicke auf Ausführen.
  3. Spezifiziere die Hauptklasse deines Projekts mittels Durchsuchen.
  4. Erstelle und führe die Jar-Datei aus.

1voto

Ritesh Tyagi Punkte 57

Ich habe eine großartige Lösung gefunden, die in jeder solchen Situation helfen würde, vorausgesetzt, Sie benötigen nur ein ausführbares Jar, was in den meisten Fällen der Fall ist. Wenn Ihre Anwendung in Intellij Idea läuft, befolgen Sie diese Schritte: 1) Gehen Sie zu den Modul-Einstellungen und dann zu Artefakten, fügen Sie ein Jar hinzu und definieren Sie die Hauptklasse 2) Gehen Sie dann im Menü auf Build und klicken Sie auf "Artefakt erstellen" und Sie erhalten das Jar.

Dies hat sogar funktioniert, als ich den Quellordner geändert und scala anstelle von java verwendet habe.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X