2 Stimmen

Kein Hauptmanifestattribut (Aber ich habe die Manifest-Datei im Jar)

Hinweis- Ich habe das gelöst und werde die Antwort zum Nutzen anderer veröffentlichen. Und beachten Sie, dass ich mir auch andere Antworten zu diesem Fehler angesehen habe, aber sie haben nicht abgedeckt, was hier los war.

C:\blah>type a.java
class a { public static void main(String[] args) { } }

Kompilieren Sie es

C:\blah>javac a.java

Liste der Dateien in blah

C:\blah>dir /s/b
C:\blah\a.class
C:\blah\a.java
C:\blah\manifest

Meine Manifest-Datei, die ich in Notepad geschrieben habe

C:\blah>type manifest
Main-Class: a
C:\blah>

Das Jar erstellen

C:\blah>jar cvfm asdf.jar manifest -C . .
added manifest
adding: a.class(in = 247) (out= 187)(deflated 24%)
adding: a.java(in = 56) (out= 55)(deflated 1%)
adding: manifest(in = 13) (out= 15)(deflated -15%)

Das Jar ausführen

C:\blah>java -jar asdf.jar
no main manifest attribute, in asdf.jar

Ich habe mir andere Antworten auf die Frage angesehen, sie schlugen vor, eine Manifest-Datei hinzuzufügen

aber die Manifest-Datei befindet sich im Jar

C:\blah>jar -tf asdf.jar
META-INF/
META-INF/MANIFEST.MF
a.class
a.java
manifest

C:\blah>

1voto

barlop Punkte 11355

Als ich die Manifestdatei in Notepad schrieb, hatte sie kein neues Zeilenende. Das hat den Fehler verursacht.

Windows verwendet CRLF als Zeilentrenner, im Gegensatz zu Linux, das LF als Zeilenende verwendet. Also hatte die eine Zeile, die ich in Notepad geschrieben habe, kein CRLF am Ende.

Aber java -jar jarfile.jar erfordert, dass das Manifest am Ende eine neue Zeile (in diesem Fall CRLF) hat. Meins hatte nichts am Ende der Zeile.

C:\blah>type manifest
Main-Class: a
C:\blah>

Erstellen der Jar-Datei

C:\blah>jar cvfm asdf.jar manifest -C . .
added manifest
adding: a.class(in = 247) (out= 187)(deflated 24%)
adding: a.java(in = 56) (out= 55)(deflated 1%)
adding: manifest(in = 13) (out= 15)(deflated -15%)

Ausführen der Jar-Datei

C:\blah>java -jar asdf.jar
kein Hauptmanifestattribut in asdf.jar

Was fehlschlägt, wie wir sehen werden, weil kein neues Zeilenende in der Manifestdatei vorhanden ist

Fügen Sie die neue Zeile am Ende der Manifestdatei hinzu. Das kann auch in Notepad gemacht werden

C:\blah>echo.>>manifest

Inhalte der Manifestdatei

C:\blah>type manifest
Main-Class: a
C:\blah>

Führen Sie die Jar-Datei aus

C:\blah>java -jar asdf.jar
kein Hauptmanifestattribut in asdf.jar

Fehlgeschlagen, weil es immer noch die alte Jar-Datei war ;-)

Erstellen der Jar-Datei.. seitdem eine neue Zeile zur Manifestdatei hinzugefügt wurde

C:\blah>jar cvfm asdf.jar manifest -C . .
added manifest
adding: a.class(in = 247) (out= 187)(deflated 24%)
adding: a.java(in = 56) (out= 55)(deflated 1%)
adding: manifest(in = 15) (out= 17)(deflated -13%)

Und es läuft ohne Fehler

C:\blah>java -jar asdf.jar

C:\blah>

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