Verwendung der Datei MANIFEST.MF in Java


Antworten:


87

Der Inhalt der Manifest-Datei in einer JAR-Datei, die mit Version 1.0 des Java Development Kit erstellt wurde, lautet wie folgt.

Manifest-Version: 1.0

Alle Einträge sind als Name-Wert-Paare. Der Name eines Headers wird durch einen Doppelpunkt von seinem Wert getrennt. Das Standardmanifest zeigt, dass es Version 1.0 der Manifestspezifikation entspricht. Das Manifest kann auch Informationen zu den anderen Dateien enthalten, die im Archiv gepackt sind. Welche Dateiinformationen genau im Manifest aufgezeichnet werden, hängt von der beabsichtigten Verwendung der JAR-Datei ab. Die Standardmanifestdatei macht keine Annahmen darüber, welche Informationen sie über andere Dateien aufzeichnen soll, sodass ihre einzelne Zeile nur Daten über sich selbst enthält. Manifest-Header für besondere Zwecke

Abhängig von der beabsichtigten Rolle der JAR-Datei muss das Standardmanifest möglicherweise geändert werden. Wenn die JAR-Datei nur zum Zwecke der Archivierung erstellt wird, hat die Datei MANIFEST.MF keinen Zweck. Die meisten Verwendungen von JAR-Dateien gehen über die einfache Archivierung und Komprimierung hinaus und erfordern spezielle Informationen in der Manifestdatei. Im Folgenden werden kurze Beschreibungen der Header zusammengefasst, die für einige spezielle JAR-Dateifunktionen erforderlich sind

Als JAR-Dateien gebündelte Anwendungen : Wenn eine Anwendung in einer JAR-Datei gebündelt ist, muss der Java Virtual Machine der Einstiegspunkt für die Anwendung mitgeteilt werden. Ein Einstiegspunkt ist eine Klasse mit einer öffentlichen statischen void main-Methode (String [] args). Diese Informationen werden im Hauptklassen-Header bereitgestellt, der die allgemeine Form hat:

Main-Class: classname

Der Wert Klassenname ist durch den Einstiegspunkt der Anwendung zu ersetzen.

Download-Erweiterungen: Download-Erweiterungen sind JAR-Dateien, auf die von den Manifestdateien anderer JAR-Dateien verwiesen wird. In einer typischen Situation wird ein Applet in einer JAR-Datei gebündelt, deren Manifest auf eine JAR-Datei (oder mehrere JAR-Dateien) verweist, die als Erweiterung für die Zwecke dieses Applets dient. Erweiterungen können auf dieselbe Weise aufeinander verweisen. Download-Erweiterungen werden im Feld Klassenpfad-Header in der Manifestdatei eines Applets, einer Anwendung oder einer anderen Erweiterung angegeben. Ein Klassenpfad-Header könnte beispielsweise so aussehen:

Class-Path: servlet.jar infobus.jar acme/beans.jar

Mit diesem Header dienen die Klassen in den Dateien servlet.jar, infobus.jar und acme / beans.jar als Erweiterungen für die Zwecke des Applets oder der Anwendung. Die URLs im Class-Path-Header werden relativ zur URL der JAR-Datei des Applets oder der Anwendung angegeben.

Paketversiegelung: Ein Paket in einer JAR-Datei kann optional versiegelt werden. Dies bedeutet, dass alle in diesem Paket definierten Klassen in derselben JAR-Datei archiviert werden müssen. Ein Paket kann versiegelt werden, um die Versionskonsistenz zwischen den Klassen in Ihrer Software oder als Sicherheitsmaßnahme sicherzustellen. Um ein Paket zu versiegeln, muss ein Namenskopf für das Paket hinzugefügt werden, gefolgt von einem versiegelten Kopf, ähnlich dem folgenden:

Name: myCompany/myPackage/
Sealed: true

Der Wert des Name-Headers ist der relative Pfadname des Pakets. Beachten Sie, dass es mit einem '/' endet, um es von einem Dateinamen zu unterscheiden. Alle Header, die einem Name-Header folgen, ohne dazwischenliegende Leerzeilen, gelten für die im Name-Header angegebene Datei oder das Paket. Im obigen Beispiel wird der versiegelte Header so interpretiert, dass er (nur) auf das Paket myCompany / myPackage angewendet wird, da der versiegelte Header nach dem Header Name: myCompany / myPackage ohne Leerzeilen dazwischen steht.

Paketversionierung: Die Paketversionierungsspezifikation definiert mehrere Manifest-Header, die Versionsinformationen enthalten sollen. Jedem Paket kann ein Satz solcher Header zugewiesen werden. Die Versionsüberschriften sollten direkt unter der Namensüberschrift für das Paket angezeigt werden. Dieses Beispiel zeigt alle Versionsheader:

Name: java/util/
Specification-Title: "Java Utility Classes" 
Specification-Version: "1.2"
Specification-Vendor: "Sun Microsystems, Inc.".
Implementation-Title: "java.util" 
Implementation-Version: "build57"
Implementation-Vendor: "Sun Microsystems, Inc."

35
Bitte kopieren Sie keine Arbeit. Sie sollten einen Link zur Webseite hinzufügen. docs.oracle.com/javase/tutorial/deployment/jar/sealman.html
Damian Leszczyński - Vash

57
Es ist keine Kopie, sondern eine Zusammenfassung ... von 5 Seiten.
Frank

65
Sie können diese Zusammenfassung aufrufen. Die Sätze wurden ohne zusätzliche Schlussfolgerung oder Punkt kopiert. Ich denke, dass Sie die Arbeit von jemandem respektieren und Links und Zitate hinzufügen sollten.
Damian Leszczyński - Vash

19

Manifest.MF enthält Informationen zu den in der JAR-Datei enthaltenen Dateien.

Jedes Mal, wenn eine JAR-Datei erstellt wird, wird eine Standarddatei manifest.mf im Ordner META-INF erstellt, die die folgenden Standardeinträge enthält:

Manifest-Version: 1.0
Created-By: 1.7.0_06 (Oracle Corporation)

Dies sind Einträge als "Header: Wert" -Paare. Die erste gibt die Manifestversion an und die zweite die JDK-Version, mit der die JAR-Datei erstellt wird.

Hauptklassen-Header: Wenn eine JAR-Datei zum Bündeln einer Anwendung in einem Paket verwendet wird, müssen wir die Klasse angeben, die einen Einstiegspunkt der Anwendung bedient. Wir stellen diese Informationen mithilfe des 'Main-Class'-Headers der Manifestdatei zur Verfügung.

Hauptklasse: {voll qualifizierter Klassenname}

Der Wert 'Hauptklasse' ist hier die Klasse mit der Hauptmethode. Nachdem Sie diesen Eintrag angegeben haben, können Sie die JAR-Datei ausführen, um die Anwendung auszuführen.

Klassenpfad-Header: In den meisten Fällen müssen wir über die in der JAR-Datei der Anwendung enthaltenen Klassen auf die anderen JAR-Dateien zugreifen. Dies kann erreicht werden, indem die vollständig qualifizierten Pfade in der Manifestdatei mithilfe des Headers 'Class-Path' angegeben werden.

Klassenpfad: {jar1-name jar2-name Verzeichnisname / jar3-Name}

Dieser Header kann verwendet werden, um die externen JAR-Dateien im selben lokalen Netzwerk und nicht innerhalb der aktuellen JAR anzugeben.

Paketversionsbezogene Header: Wenn die JAR-Datei für die Paketversionierung verwendet wird, werden die folgenden Header verwendet, wie in der Java-Sprachspezifikation angegeben:

Headers in a manifest
Header                  | Definition
-------------------------------------------------------------------
Name                    | The name of the specification.
Specification-Title     | The title of the specification.
Specification-Version   | The version of the specification.
Specification-Vendor    | The vendor of the specification.
Implementation-Title    | The title of the implementation.
Implementation-Version  | The build number of the implementation.
Implementation-Vendor   | The vendor of the implementation.

Paketversiegelungsbezogene Header:

Wir können auch angeben, ob bestimmte Pakete in einer JAR-Datei versiegelt werden sollen, was bedeutet, dass alle in diesem Paket definierten Klassen in derselben JAR-Datei archiviert werden müssen. Dies kann mit Hilfe des 'Sealed'-Headers angegeben werden.

Name: {package / some-package /} Versiegelt: true

Hier muss der Paketname mit '/' enden.

Verbesserung der Sicherheit mit Manifestdateien:

Wir können Manifestdateieinträge verwenden, um die Sicherheit der Webanwendung zu gewährleisten, oder Applet-Pakete mit den verschiedenen Attributen "Berechtigungen", "Codebae", "Anwendungsname", "Nur vertrauenswürdig" und vielen mehr.

META-INF-Ordner:

In diesem Ordner befindet sich die Manifestdatei. Es kann auch mehr Dateien enthalten, die Metadaten über die Anwendung enthalten. In einer JAR-Datei des EJB-Moduls enthält dieser Ordner beispielsweise den EJB-Bereitstellungsdeskriptor für das EJB-Modul sowie die Manifestdatei für die JAR. Außerdem enthält es die XML-Datei, die die Zuordnung eines abstrakten EJB-Verweises zu konkreten Containerressourcen des Anwendungsservers enthält, auf dem es ausgeführt wird.

Referenz:
https://docs.oracle.com/javase/tutorial/deployment/jar/manifestindex.html

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.