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.

40voto

morningstar Punkte 8521

Ich hatte dieses Problem beim Erstellen eines Jars mit IntelliJ IDEA. Siehe diese Diskussion.

Was es für mich gelöst hat, war das erneute Erstellen des Jar-Artefakts, indem ich JAR > Aus Modulen mit Abhängigkeiten auswählte, aber nicht das Standardverzeichnis für META-INF/MANIFEST.MF akzeptierte. Ändern Sie es von -/src/main/java auf -/src/main/resources.

Ansonsten war es zwar eine Manifest-Datei im Jar enthalten, aber nicht die im -/src/main/java, die es hätte sein sollen.

34voto

QED Punkte 9591

Die Gradle-Antwort besteht darin, eine jar/manifest/attributes-Einstellung wie folgt hinzuzufügen:

apply plugin: 'java'

jar {
    manifest {
        attributes 'Main-Class': 'com.package.app.Class'
    }
}

33voto

David Punkte 2182

Für Maven, das ist was es gelöst hat (für mich, für ein Veetle-Codebase auf GitHub):

    org.apache.maven.plugins
    maven-shade-plugin
    2.0

        package

          shade

              org.lazydevs.veetle.api.VeetleAPI

Prost...

31voto

Burhan ARAS Punkte 2456

Versuchen Sie diesen Befehl, um das Jar einzuschließen:

java -cp yourJarName.jar your.package..your.MainClass

19voto

eis Punkte 48781

Für mich haben keine der Antworten wirklich geholfen - ich hatte die Manifest-Datei am richtigen Ort mit dem Main-Class und allem anderen. Was mich gestört hat, war folgendes:

Warnung: Die Textdatei, aus der Sie das Manifest erstellen, muss mit einer neuen Zeile oder einem Wagenrücklauf enden. Die letzte Zeile wird nicht richtig verarbeitet, wenn sie nicht mit einer neuen Zeile oder einem Wagenrücklauf endet.

(Quelle). Das Hinzufügen einer neuen Zeile am Ende des Manifests hat das Problem behoben.

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