wake-up-neo.com

IOException: 'Ungültiges Headerfeld; beim Erstellen einer .jar-Datei mit Manifest

Wenn ich in der Eingabeaufforderung jar cvfm dateiname.jar manifest.txt * .class eingebe, erhalte ich den folgenden Fehler:

Java.io.IOException: invalid header field
    at Java.util.jar.Attributes.read(Attributes.Java:410)
    at Java.util.jar.Manifest.read(Manifest.Java:199)
    at Java.util.jar.Manifest.<init>(Manifest.Java:69)
    at Sun.tools.jar.Main.run(Main.Java:172)
    at Sun.tools.jar.Main.main(Main.Java:1177)

Ich habe diesen Fehler noch nie erlebt und kann nichts darauf finden. Was bedeutet das?

8
grim_v3.0

Überprüfen Sie den Namen einer Header-Variablen in der MANIFEST-Datei. MANIFEST-Datei ist nicht korrekt.

Mithilfe dieses Lernprogramms können Sie das MANIFEST-Dateiformat und verwandte Themen ermitteln. http://docs.Oracle.com/javase/tutorial/deployment/jar/manifestindex.html

6
Ragavan

Achten Sie auf die Reihenfolge der Parameter:

1) jar cvmf manifest.txt some.jar package/*class
2) jar cvfm some.jar manifest.txt package/*class
9
Wenjay Chnag

Wenn Sie hier gelandet sind und alles versucht haben und das Problem immer noch nicht behoben ist, überprüfen Sie, ob die MANIFEST-Datei versehentlich Tabulatoren enthält, anstatt vier Leerzeichen für Einrückungen.

Ich habe eine maven pom.xml-Datei verwendet, um das MANIFEST automatisch zu generieren, und die Eigenschaftszeile war zu groß und erstreckte sich über mehrere Zeilen wie diese:

<Extension-List> item1 item2 item3 item4
                item5 item6 item7 item8    <--- these lines are idented with tabs
                item9 item10 item11 item12 </Extension-List>

dies beschädigte die MANIFEST-Datei auf eine sehr schwer erkennbare Weise.

1
Megarushing

wenn Ihre Manifest-Datei einige zusätzliche Leerzeilen enthält, wird dieser Fehler ebenfalls verursacht. Stellen Sie sicher, dass Sie die zusätzlichen Zeilen entfernen.

0
Siva_Munnaluri

Ihre Manifest-Datei muss dem erforderlichen Format entsprechen. Wenn Sie die Datei selbst generieren, sollten Sie in der Lage sein, herauszufinden, wo Sie die falsche Syntax gefunden haben. Wenn die Manifestdatei jedoch von einem Tool oder Prozess generiert wurde, müssen Sie in der Dokumentation des Tools nachsehen, ob ein Fehler im Tool aufgetreten ist.

0
NRitH

Mein Problem war, dass ich viele Abhängigkeiten in einer Zeile hatte, sodass ich sie mit einem einfachen Suchen und Ersetzen aufteilte, wobei sich jede JAR in einer separaten Zeile befand. Es stellt sich heraus, dass, wenn Sie etwas haben wie:

Class-Path: dependencies/org.Apache.commons.cli_1.4.jar (note the space at the end)
dependencies/org.Apache.log4j_1.2.15.v201012070815.jar (note the space at the end)

Sie müssen sicherstellen, dass die Zeile nicht mit einem Leerzeichen endet und die neue Zeile mit einem Leerzeichen beginnt.

Class-Path: dependencies/org.Apache.commons.cli_1.4.jar
 dependencies/org.Apache.log4j_1.2.15.v201012070815.jar
0
Sina Madani

Lesen Sie die erste Zeile Ihres Manifests sorgfältig durch, zum Beispiel:

Main-Class: main.HelloWorld

Ich hatte diesen Fehler, weil ich ein Leerzeichen wie dieses "Main-Class:" hinzugefügt habe.

Vielleicht ist es ähnlich.

0
Jack'

Dieses Problem kann auch auftreten, wenn Ihre MANIFEST.MF-Datei mit einigen nicht druckbaren Zeichen beginnt. Mit Tools wie Notepad und Wordpad können Sie sie nicht sehen. Sie können also schwören, dass Ihre Datei richtig aussieht und alle Ihre Header gültig sind.

In meinem Fall bekam ich die Nachricht:

Java.io.IOException: invalid header field name: Built-By

Der Hinweis, wenn Sie in dieser Situation sind, sind die Zeichen, die vor dem gültigen Built-By-Header auftreten. Dies sind nicht druckbare Zeichen, die irgendwie in Ihre MANIFEST.MF-Datei gelangt sind. Der andere Hinweis ist, eine Befehlszeile zu öffnen, zu Ihrer MANIFEST.MF-Datei zu navigieren und zu tun

>cat MANIFEST.MF
□Build-BY: TSRUT
Bundle-Description: Fragment Controller.
Bundle-License:   http://www.Apache.org/licenses/LICENSE-2.0.txt

Beachten Sie das Kästchen vor Ihrem ersten Header am Anfang der Datei. In diesem Fall ist dies die Lösung für Ihr Problem:

Öffnen Sie Ihren bevorzugten Editor, und wählen Sie manuell die gesamte Datei aus (verwenden Sie nicht den Befehl "Alles auswählen", da dadurch auch die ausgeblendeten Zeichen ausgewählt werden). Schließen Sie die Datei. Öffnen Sie eine neue Instanz Ihres Editors, fügen Sie Ihren Inhalt ein und speichern Sie die neue Datei in Ihrer ursprünglichen MANIFEST.MF-Datei. Wählen Sie Ja zum Überschreiben. Stellen Sie dann sicher, dass diese verborgenen Zeichen vom Anfang der Datei entfernt wurden.

0
Tom Rutchik