Java Archive
EinJava Archive(umgangssprachlich wegen der Dateiendung auchJAR-Dateigenannt) dient der Gliederung, Verteilung und Bereitstellung vonKlassenbibliothekenund ausführbaren Programmen, die in der ProgrammierspracheJavaerstellt wurden. Technisch ist es eine komprimierte Datei imZIP-Format. Das Archiv enthält kompilierte Java-Klassen (Bytecode) und ggf. weitere Ressourcen. In der Regel umfasst es auch eine oder mehrere Dateien mitMetadaten.Diese haben fest vorgegebene Namen und Strukturen und liegen im VerzeichnisMETA-INF
.Die typische DateiMETA-INF/MANIFEST.MF
wird im AbschnittManifestgenauer beschrieben. Die Kurzbezeichnung des Archivs kann als Wortspiel mit dem englischen Wortjar(deutsch: „Gefäß “) verstanden werden.
Verwendung
BearbeitenJAR-Dateien wurden ursprünglich eingeführt, damit vonJava-Appletsbenötigte Java-Klassen nicht einzeln aus dem Netz nachgeladen werden müssen. Die Übertragung vieler Klassen in einer Datei ist effizienter, und zusätzlich können die Dateienkomprimiertwerden.
Durch die „Manifest “-Datei kann festgelegt werden, wie die Java-Anwendung gestartet wird. Damit kann auch unter grafischen Benutzeroberflächen, wieWindows,macOSoderKDE,die Anwendung ohne Zuhilfenahme der Kommandozeile gestartet werden (vorausgesetzt, der Dateiendung.jar
wurde der entsprechende Befehl zugewiesen). Mitjava -jar
kann man JAR-Dateien aus derKommandozeilestarten. JAR-Archive speichern Dateinamen intern UTF-8-kodiert, sodass sie auch Umlaute enthalten dürfen. Voraussetzung für das Ausführen von JARs bzw. Java-Programmen ist immer ein installiertesJava Runtime Environment.
JAR-Dateien können mit demjar-Befehl desJDK(der die Syntax vontarbenutzt) oder, sofern die Dateinamen nur ASCII-Zeichen enthalten, mit jedem ZIP-Programm erstellt werden. Außerdem bietet dieJava Platform, Standard Editionin den beiden Paketen „java.util.jar “und „java.util.zip “Klassenan, um JAR- oder ZIP-Archive auszulesen oder zu erstellen.
Zum Beispiel zeigt der folgende Befehl den Inhalt einer JAR-Datei namenstest.jaran.
jar tvf test.jar
Dabei steht der Buchstabetfür „Inhaltsverzeichnis anzeigen “(von englischtable of contents),vfür ausführliche Ausgabe (von englischverbose) undfbesagt, dass aus einer Datei (englischfile) gelesen werden soll, deren Name folgt.
Manifest
BearbeitenJedes Java Archive kann im Verzeichnis „META-INF “durch eine Datei namens „MANIFEST.MF “verschiedene Informationen über den Inhalt des Archivs bereitstellen. Zu den wichtigsten Meta-Informationen zählen
- die zurLaufzeitermittelbare Version enthaltenerKlassenbibliotheken,
- Informationen über enthalteneJavaBeansund
- der Name der Hauptklasse einer enthaltenenJava-Anwendung.
Diese Manifest-Datei ist eine einfache zeilenorientierte Textdatei, die mehrere Paare aus Namen und Werten enthält, deren jedes ein sogenanntes Attribut definiert. Ein Attribut ist eine Eigenschaft der gesamten Anwendung, der enthaltenen Klassenbibliothek oder auch nur eines einzelnenJava-Pakets(package) oder einer einzelnenKlasse.Zusätzlich ist sie in mehrere Abschnitte (sections) aufgeteilt.
Der erste Abschnitt heißtmain section(Hauptabschnitt) und definiert Attribute, die sich auf das gesamte Java Archive beziehen. Er beginnt immer mit der Definition des Attributs „Manifest-Version “, während die übrigen Attribute optional sind. Die folgenden Abschnitte beziehen sich jeweils auf ein einzelnes Paket oder eine Klasse und sind optional ebenso wie die darin enthaltenen Attribute. Unbekannte Attribute werden ignoriert und führen nicht zu Fehlermeldungen. Wird ein Attribut sowohl im Hauptabschnitt als auch in einem Einzelabschnitt definiert, so überlagert der im Einzelabschnitt definierte Wert den im Hauptabschnitt vorbelegten für diejenige Komponente (Paket oder Klasse), auf die sich der Abschnitt bezieht.
Beispiel
BearbeitenDas folgende Beispiel zeigt einen Ausschnitt des Manifests der in der Laufzeitumgebung von Java 1.4 enthaltenen Datei „rt.jar “.
Manifest-Version: 1.0 Specification-Title: Java Platform API Specification Created-By: 1.4.2_05 (Sun Microsystems Inc.) Implementation-Title: Java Runtime Environment Specification-Vendor: Sun Microsystems, Inc. Specification-Version: 1.4 Implementation-Version: 1.4.2_05 Implementation-Vendor: Sun Microsystems, Inc.
Name: javax/swing/JRadioButtonMenuItem.class Java-Bean: True
Name: javax/swing/JList.class Java-Bean: True
Dem Hauptabschnitt in diesem Beispiel lässt sich entnehmen, dass dieses Manifest so aufgebaut ist, wie in (der bisher einzigen) Version 1 der JAR-Datei-Spezifikation von Sun Microsystems beschrieben. Die übrigen Attribute dieses Hauptabschnitts liefern Informationen über die von der Bibliothek erfüllteSpezifikation,den Erzeuger des Java Archives, den Namen der Implementierung, sowie Hersteller und Version der verwendeten Spezifikation und der enthaltenen Implementierung. Die beiden folgenden Abschnitte des Beispiels beziehen sich jeweils auf eine Klasse, die alsJavaBeanmarkiert wird.
Abgeleitete Formate
BearbeitenWeitere Spezialisierungen des JAR-Formats sind zum BeispielWAR-Dateien(Web Application Archive), EAR-Dateien (Enterprise Application Archive) oderOpenDocument-Dateien.
Hilfsprogramme
BearbeitenDasJava Development Kitenthält bzw. enthielt mehrere Programme zur Manipulation von JAR-Dateien:
- jar
- jarist ein Programm zum Erzeugen, Modifizieren und Entpacken von JAR-Dateien, dessen Aufrufparameter denjenigen des bekannten Unix-Programmstarähneln.
- jarsigner
- jarsignerist ein Programm, das JAR-Dateiensigniertund deren elektronische Signatur überprüft.
- pack200
- pack200wandelte JAR-Dateien in ein Dateiformat um, das Bytecode effizienter speichern kann. Es wurde in Java 5 eingeführt und kam insbesondere beiJava Web Startzum Einsatz, da hier unter Umständen größere Dateimengen über dasInternetübertragen werden mussten. Die Rückwandlung erfolgte mit dem Programmunpack200.Java 13 war die letzte Version, die pack200 und unpack200 enthielt.[1]
Nicht im JDK enthaltene Programmierwerkzeuge für JAR-Dateien:
- ProGuard
- ProGuardist ein Programm zum Komprimieren, Optimieren undVerschleiernvon JAR-Dateien. Dies wird durch eine genauere Analyse desBytecodeserreicht.
- Packer
- Sofern die Dateinamen im Archiv ausASCII-Zeichen bestehen, lassen sich JAR-Dateien mit jedem Software-Werkzeug bearbeiten, das auchZIP-Dateien bearbeiten kann. Einige Beispiele sind in derListe von Datenkompressionsprogrammenaufgeführt.
Einzelnachweise
Bearbeiten- ↑JEP 367: Remove the Pack200 Tools and API.Oracle,abgerufen am 2. Juli 2023(englisch).
Weblinks
Bearbeiten- JAR-Spezifikation für J2SE 1.5.0(englisch)
- Lesson: Packaging Programs in JAR Files(englisch)
- Christian Ullenboom:Das Archivformat Jar.Abschnitt 23.5.Rheinwerk Verlag,2021 .