Titel | Inhalt | Suchen | Index | DOC | Handbuch der Java-Programmierung, 7. Auflage |
<< | < | > | >> | API | Kapitel 53 - Hilfsprogramme des JDK |
jar [ commands ] archive { input-file } |
jar ist ein Archivierungsprogramm, das Dateien und komplette Unterverzeichnisse komprimieren und in eine gemeinsame Archivdatei packen kann. Es verwendet ein Kompressionsformat, das den diversen zip-/unzip-Programmen ähnelt, und wird analog dem UNIX-Tool tar bedient. Ein Vorteil von jar ist seine Portabilität, die sowohl für das erzeugte Dateiformat als auch für das (in Java geschriebene) Programm selbst gilt.
Wichtigster Einsatzzweck von jar ist es, alle zu einem Java-Programm gehörenden Dateien (.class-, Image-, Sound-Dateien usw.) in einer einzigen Datei zusammenzufassen. Neben den organisatorischen Vorteilen, die diese Möglichkeit zweifellos bietet, wurden jar-Dateien vor allem eingeführt, um das Laden von Applets aus dem Internet zu beschleunigen. Dadurch müssen Web-Browser nämlich nicht mehr für jede einzelne Datei, die in einem Applet benötigt wird, eine eigene GET-Transaktion absetzen, sondern können alle erforderlichen Files in einem Schritt laden.
Im Gegensatz zu den übrigen Programmen, die in diesem Kapitel vorgestellt wurden, kennt jar keine Optionsparameter, sondern erwartet Kommandos an ihrer Stelle. Ein Kommando besteht aus einem Buchstaben, der ohne den Präfix - angegeben wird. Sollen mehrere Kommandos kombiniert werden, so werden die zugehörigen Buchstaben ohne Lücken direkt hintereinander geschrieben. Diese abweichende Syntax stammt von dem Kommando tar, das auf UNIX-Rechnern zur Archivierung von Dateien eingesetzt wird. Tabelle 53.7 gibt eine Übersicht der verfügbaren Kommandos.
Kommando | Bedeutung |
c | Erzeugt eine neue Archivdatei (create). Kann nicht zusammen mit t oder x verwendet werden. |
t | Gibt das Inhaltsverzeichnis der Archivdatei aus (table of contents). Kann nicht zusammen mit c oder x verwendet werden. |
x file | Extrahiert eine oder mehrere Dateien aus dem Archiv (extract). Kann nicht zusammen mit c oder t verwendet werden. |
u | Fügt die angegebenen Dateien in die bestehende Archivdatei ein. |
f | Gibt an, dass der nächste Parameter der Name der Archivdatei ist. Wird das Kommando f nicht angegeben, verwendet jar stattdessen die Standardein- und -ausgabe. |
v | Gibt zusätzliche Informationen aus (verbose). Kann zusätzlich zu einem der anderen Kommandos verwendet werden. |
0 | Die Dateien werden ohne Kompression gespeichert. |
Tabelle 53.7: Kommandos von jar
Sollen beispielsweise alle .java-Dateien
des aktuellen Verzeichnisses in ein Archiv mit der Bezeichnung xyz.jar
gepackt werden, so kann dazu folgendes Kommando verwendet werden:
jar cf xyz.jar *.java
Das Inhaltsverzeichnis des Archivs kann folgendermaßen abgerufen
werden:
jar tf xyz.jar
Etwas ausführlicher geht es mit:
jar tvf xyz.jar
Um die Datei Test.java aus dem Archiv
zu extrahieren, kann das folgende Kommando verwendet werden (das natürlich
auch ohne den Zusatz v funktioniert):
jar xvf xyz.jar Test.java
In eine jar-Datei kann in das Unterverzeichnis META-INF eine Datei mit dem Namen MANIFEST.MF abgelegt werden. Dabei handelt es sich um die sogenannte »Manifest-Datei«, die den Inhalt der jar-Datei mit Metainformationen anreichert. Ihr Aufbau ist genau spezifiziert, im Prinzip besteht sie aus einer Menge von Key-Value-Paaren.
Neben einer Reihe weiterer Eigenschaften lassen sich insbesondere
ein Klassenpfad und eine Main-Klasse
darin ablegen. Ist die Main-Klasse
spezifiziert, kann das jar-File mit dem
Kommando java -jar direkt gestartet
werden. Der Inhalt der Manifest-Datei ist dann:
Main-Class: de.meinpaket.MeineKlasse
Der Klassenname muss voll qualifiziert werden, die Klasse muss im jar-File enthalten sein und natürlich eine main-Methode enthalten.
Benötigt eine jar-Datei zur Ausführung
ein anderes jar-File, dann kann das in
der Manifest-Datei durch einen entsprechenden Eintrag zum Ausdruck
gebracht werden und der Aufrufer braucht die abhängige jar-Datei
nicht mehr explizit in den Klassenpfad aufzunehmen. Die Manifestdatei
sieht nun wie folgt aus:
Class-Path: meinjarfile.jar
Wahlweise kann man auch mehrere Jar-Dateien im Klassenpfad spezifizieren,
die durch Leerzeichen voneinander zu trennen sind:
Class-Path: meinjarfile1.jar meinjarfile2.jar ...
Natürlich kann man auch beide Eigenschaften in einer Manifestdatei
vereinen:
Main-Class: de.meinpaket.MeineKlasse
Class-Path: meinjarfile1.jar meinjarfile2.jar ...
Die Verwendung von jar-Dateien in Applets erfolgt mit Hilfe des ARCHIVE-Parameters des APPLET-Tags (siehe Kapitel 40). Soll beispielsweise das »Hello, World«-Programm HWApplet.java aus Listing 40.7 aus einem jar-Archiv hello.jar ausgeführt werden, so ist in den folgenden Schritten vorzugehen.
Zunächst werden die Dateien HWApplet.class,
hello.au und world.au
in ein jar-Archiv gepackt:
jar cvf hello.jar HWApplet.class hello.au world.au
Anschließend wird die HTML-Datei HWApplet.html zum Aufruf des Applets erstellt:
001 <html> 002 <head> 003 <title>HWApplet</title> 004 </head> 005 <body> 006 <h1>HWApplet</h1> 007 <applet 008 code=HWApplet.class 009 archive=hello.jar 010 width=300 011 height=200> 012 Hier steht das Applet HWApplet.class 013 </applet> 014 </body> 015 </html> |
HWApplet.html |
Nun kann das Applet wie bisher gestartet werden, benötigt aber zum Laden aller Dateien nur noch eine einzige HTTP-Transaktion.
Titel | Inhalt | Suchen | Index | DOC | Handbuch der Java-Programmierung, 7. Auflage, Addison Wesley, Version 7.0 |
<< | < | > | >> | API | © 1998, 2011 Guido Krüger & Heiko Hansen, http://www.javabuch.de |