Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Vorwort
1 Java ist auch eine Sprache
2 Sprachbeschreibung
3 Klassen und Objekte
4 Der Umgang mit Zeichenketten
5 Mathematisches
6 Eigene Klassen schreiben
7 Angewandte Objektorientierung
8 Exceptions
9 Generics, innere Klassen
10 Die Klassenbibliothek
11 Threads und nebenläufige Programmierung
12 Datenstrukturen und Algorithmen
13 Raum und Zeit
14 Dateien und Datenströme
15 Die eXtensible Markup Language (XML)
16 Grafische Oberflächen mit Swing
17 Grafikprogrammierung
18 Netzwerkprogrammierung
19 Verteilte Programmierung mit RMI und Web–Services
20 JavaServer Pages und Servlets
21 Applets
22 Midlets und die Java ME
23 Datenbankmanagement mit JDBC
24 Reflection und Annotationen
25 Logging und Monitoring
26 Sicherheitskonzepte
27 Java Native Interface (JNI)
28 Dienstprogramme für die Java-Umgebung
Stichwort

Download:
- ZIP, ca. 14,1 MB
Buch bestellen
Ihre Meinung?

Spacer
<< zurück
Java ist auch eine Insel (8. Auflage) von Christian Ullenboom
Programmieren mit der Java Standard Edition Version 6
Buch: Java ist auch eine Insel (8. Auflage)

Java ist auch eine Insel (8. Aufl.)
8., aktual. Auflage, geb., mit DVD
1.475 S., 49,90 Euro
Galileo Computing
ISBN 978-3-8362-1371-4
Pfeil 28 Dienstprogramme für die Java-Umgebung
Pfeil 28.1 Die Werkzeuge im Überblick
Pfeil 28.2 Java-Compiler
Pfeil 28.2.1 Bytecode-Compiler javac
Pfeil 28.2.2 Native Compiler
Pfeil 28.2.3 Java-Programme in ein natives ausführbares Programm einpacken
Pfeil 28.3 Der Java-Interpreter java
Pfeil 28.3.1 Der Unterschied zwischen java.exe und javaw.exe
Pfeil 28.4 Das Archivformat Jar
Pfeil 28.4.1 Das Dienstprogramm Jar benutzen
Pfeil 28.4.2 Das Manifest
Pfeil 28.4.3 Applikationen in Jar-Archiven starten
Pfeil 28.4.4 Applets in Jar-Archiven
Pfeil 28.5 Monitoringprogramme
Pfeil 28.5.1 jps
Pfeil 28.5.2 jstat
Pfeil 28.5.3 jmap
Pfeil 28.5.4 jstack
Pfeil 28.6 Ant
Pfeil 28.6.1 Bezug und Installation von Ant
Pfeil 28.6.2 Properties
Pfeil 28.6.3 Externe und vordefinierte Properties
Pfeil 28.6.4 Weitere Ant-Tasks
Pfeil 28.6.5 Das Obfuscator-Programm ProGuard
Pfeil 28.7 Weitere Dienstprogramme
Pfeil 28.7.1 Sourcecode Beautifier
Pfeil 28.7.2 Java-Programme als Systemdienst ausführen
Pfeil 28.8 Zum Weiterlesen


Galileo Computing - Zum Seitenanfang

28.4 Das Archivformat Jar Zur nächsten ÜberschriftZur vorigen Überschrift

Sun Microsystems führte mit den Jar-Dateien (von Java-Archiv) ein Archivformat ein, das Zip ähnelt. Wie für ein Archivformat üblich, packt auch Jar mehrere Dateien zusammen. »Gepackt« heißt aber nicht zwingend, dass die Dateien komprimiert sein müssen, sie können einfach nur in einem Jar gebündelt sein. Ein Auspackprogramm wie WinZip kann Jar-Dateien entpacken. Hier bleibt zu überlegen, ob ein Programm wie WinZip mit der Dateiendung .jar verbunden werden soll oder ob das Standardverhalten bei installiertem JRE beibehalten wird: Unter Windows ist mit der Dateiendung .jar das JRE verbunden, das die Hauptklasse des Archivs startet.

Signieren und Versionskennungen

Microsoft vertraut bei seinen ActiveX-Controls vollständig auf Zertifikate und glaubt an eine Zurückverfolgung der Übeltäter in dem Fall, dass das Control Unsinn anstellt. Leider ist in dieser Gedankenkette ein Fehler enthalten, weil jeder sich Zertifikate ausstellen lassen kann, auch unter dem Namen Mickey Mouse [Obwohl dieser schon vergeben ist, doch vielleicht ist Darkwing Duck ja noch frei.] .

Überlegt angewendet, ist das Konzept jedoch gut zu verwenden. Sun hat daher bei Jar-Archiven das gleiche Konzept eingeführt. Jar-Dateien lassen sich durch eine Signatur schützen, und die Laufzeitumgebung räumt Java-Programmen Extrarechte ein, die ein normales Programm sonst nicht hätte. Dies ist bei Programmen aus dem Intranet interessant.

Des Weiteren können Hersteller Informationen über Version und Kennung hinzufügen wie auch eine Versionskontrolle, damit nur solche Klassen eines Archivs verwendet werden, die den Verbleib in der gleichen Version gewährleisten. Ferner kam ein Archivformat hinzu, das Pakete zur Core-Plattform API hinzunehmen kann. Ein Beispiel ist etwa die 3D- und Java-Mail-API. Eigene Pakete sehen also so aus, als gehörten sie zum Standard.


Galileo Computing - Zum Seitenanfang

28.4.1 Das Dienstprogramm Jar benutzen Zur nächsten ÜberschriftZur vorigen Überschrift

jar ist ein Kommandozeilenprogramm und verfügt über verschiedene Optionen, um Archive zu erzeugen, sie auszupacken und anzusehen. Die wichtigsten Formen für das Kommandozeilenprogramm sind:

  • Anlegen: jar c[Optionen] Jar-Datei Eingabedateien
  • Aktualisieren: jar u[Optionen] Jar-Datei Eingabedateien
  • Auspacken: jar x[Optionen] Jar-Datei
  • Inhalt anzeigen: jar t[Optionen] Jar-Datei
  • Indexdatei INDEX.LIST erzeugen: jar i Jar-Datei

Je nach Aktion sind weitere Optionen möglich.

Gleichsam gibt es eine API im Paket java.util.jar, mit der alles programmiert werden kann, was auch das Dienstprogramm leistet.

Jar-Dateien anlegen

Die notwendige Option für das Anlegen eines neuen Archivs ist c (für engl. create). Da wir häufig die Ausgabe (das neue Archiv) in einer Datei haben wollen, geben wir zusätzlich f (für engl. file) an. Somit können wir schon unser erstes Archiv erstellen. Nehmen wir dazu an, es gibt ein Verzeichnis images für Bilder und die Klasse Slider.class. Dann packt folgende Zeile die Klasse und alle Bilder in das Archiv slider.jar:

$ jar cvf slider.jar Slider.class images

Während des Komprimierens geht Jar alle angegebenen Verzeichnisse und Unterverzeichnisse durch und gibt, da zusätzlich zu cf der Schalter v gesetzt ist, auf dem Bildschirm die Dateien mit einem Kompressionsfaktor an:

adding: Slider.class (in=2790) (out=1506) (deflated 46%) 
adding: images/ (in=0) (out=0) (stored 0%) 
adding: images/darkwing.gif (in=1065) (out=801) (deflated 24%) 
adding: images/volti.gif (in=173) (out=154) (deflated 10%) 
adding: images/superschurke.gif (in=1076)(out=926)(deflated 13%) 
adding: images/aqua.gif (in=884) (out=568) (deflated 35%)

Statt der Dateinamen können wir auch * oder andere Wildcards angeben. Diese Expansionsfähigkeit ist ohnehin Aufgabe der Shell.

Möchten wir die Dateien nicht komprimiert haben, sollten wir den Schalter 0 angeben.

Jar behält bei den zusammengefassten Dateien standardmäßig die Verzeichnisstruktur bei. In der oberen Ausgabe ist abzulesen, dass Jar für images ein eigenes Verzeichnis im Archiv erstellt und die Bilder dort hineinsetzt. Der Schalter C (genau wie -C beim Kompressionsprogramm GZip) bildet diese hierarchische Struktur flach ohne Verzeichnisstruktur ab. Wenn wir mehrere Verzeichnisse zusammenpacken, lässt sich für jedes Verzeichnis bestimmen, ob die Struktur erhalten bleiben soll oder nicht. Nehmen wir zu unserem sliders-Archiv noch ein weiteres Verzeichnis mit Sound-Dateien hinzu, und beobachten wir die Ausgabe bei:

$ jar cfv0 slider.jar Slider.class images -C sounds

Zweierlei ist neu: Zum einen komprimiert Jar nicht mehr (der Schalter 0 ist gesetzt), und die Option C erreicht, dass Jar in das sound-Verzeichnis geht und dort alle Sound-Dateien in das Basisverzeichnis setzt.

Einer angelegten Archiv-Datei lassen sich später mit u (für engl. update) noch Dateien hinzufügen. Nehmen wir an, es kommt eine Bilddatei hinzu, so schreiben wir:

$ jar vuf slider.jar images/buchsbaum.gif

Jar-Dateien betrachten

Die zusammengepackten Dateien zeigt die Option tf an:

$ jar tf slider.jar 
META-INF/MANIFEST.MF 
Slider.class 
images/volti.gif

Zusätzlich zu unseren Dateien sehen wir eine von Jar eigenständig hinzugefügte Manifest-Datei, die wir etwas später in Abschnitt 28.4.2 besprechen wollen.

Fehlt die Endung oder ist der Dateiname falsch angegeben, folgt eine etwas ungewöhnliche Fehlermeldung: java.io.FileNotFoundException – das heißt: ein Dateiname und dann ein Stack-Trace. Dies wirkt etwas unprofessionell.

Zum Anzeigen der Archive kommt der Schalter t (für engl. table of contents) zum Einsatz. Wir geben im Beispiel f an, weil wir den Dateinamen auf der Kommandozeile eintragen und nicht von der Standardeingabe etwa über eine Pipe lesen. Zusätzlich gibt uns der Schalter v (für engl. verbose) noch den Zeitpunkt der letzten Änderung und die Dateigröße aus:

 291 Fri Dec 17 14:51:08 GMT 1999 META-INF/MANIFEST.MF 
2790 Thu Dec 16 14:54:06 GMT 1999 Slider.class 
 173 Mon Oct 14 00:38:00 GMT 1996 images/volti.gif

Dateien aus dem Archiv extrahieren

Der wichtigste Schalter beim Entpacken ist x (für engl. extract). Zusätzlich gilt für den Schalter f (file) das Gleiche wie beim Anzeigen: Ohne den Schalter erwartet jar die Archiv-Datei in der Standardeingabe. Als Parameter ist zusätzlich das Archiv erforderlich. Sind optional Dateien oder Verzeichnisse angegeben, packt Jar nur diese aus. Nötige Verzeichnisse für die Dateien erzeugt Jar automatisch. Hier ist Vorsicht geboten, denn Jar überschreibt alle Dateien, die schon mit dem gleichen Namen auf dem Datenträger existieren. Das Archiv bleibt nach dem Auspacken erhalten. Wir wollen jetzt nur die Grafiken aus unserem Archiv slider.jar auspacken. Dazu schreiben wir:

$ jar vxf slider.jar images\* 
extracted: images\volti.gif

Die Option v haben wir eingesetzt, damit wir sehen, was jar genau packt. Sonst erfolgt keine Ausgabe auf der Konsole.


Galileo Computing - Zum Seitenanfang

28.4.2 Das Manifest Zur nächsten ÜberschriftZur vorigen Überschrift

Ohne dass die Ausgabe es zeigt, fügt Jar beim Erzeugen eines Archivs automatisch eine Manifest-Datei namens META-INF/MANIFEST.MF ein. Ein Manifest enthält für ein Archiv wichtige Zusatzinformationen, wie die Signatur, die für jede Datei aufgeführt ist. Sehen wir uns einmal die Manifest-Datei an, die sich für

$ jar cfv slider.jar Slider.class images/volti.gif

ergibt. Die Einträge im Manifest erinnern an eine Property-Datei, denn auch hier gibt es immer Schlüssel und Werte, die durch einen Doppelpunkt getrennt sind.

Manifest-Version: 1.0 
Name: Slider.class 
Digest-Algorithms: SHA MD5 
SHA-Digest: /RD8BF1mwd3bYXcaYYkqLjCkYdw= 
MD5-Digest: WcnCNJbo08PH/ATqMHqZDw== 
Name: images/volti.gif 
Digest-Algorithms: SHA MD5 
SHA-Digest: 9zeehlViDy0fpfvOKkPECiMYvH0= 
MD5-Digest: qv913KlZFi5tdPr2BjatIg==

Galileo Computing - Zum Seitenanfang

28.4.3 Applikationen in Jar-Archiven starten Zur nächsten ÜberschriftZur vorigen Überschrift

Dass die Dateien zusammen in einem Archiv gebündelt sind, hat den Vorteil, dass Entwickler ihren Kunden nicht mehr ein ganzes Bündel von Klassen- und Ressourcen-Dateien ausliefern müssen, sondern nur eine einzige Datei. Ein anderer Vorteil ist, dass ein Betriebssystem wie Windows oder Mac OS X standardmäßig mit der Endung .jar das JRE (Java Runtime Environment) verbunden hat, sodass ein Doppelklick auf einer Jar-Datei das Programm gleich startet.

Main-Class im Manifest

Damit die Laufzeitumgebung weiß, welches main() welcher Klasse sie aufrufen soll, ist eine kleine Notiz mit dem Schlüssel Main-Class in der Manifest-Datei nötig:

Main-Class: voll.qualifizierter.Klassenname.der.Klasse.mit.main

Dies ist sehr angenehm für den Benutzer eines Archivs, denn nun ist der Hersteller für den Eintrag des Einstiegspunkts im Manifest verantwortlich.

Manifest-Dateien mit Main-Class-Einträgen erstellen

Es lässt sich das m-Flag (für engl. merge) beim Dienstprogramm Jar nutzen, um Einträge zum Manifest hinzuzufügen und auf diese Weise dem Jar-Archiv die Klasse mit der main()-Funktion mitzuteilen. Vor der Erzeugung eines Archivs erstellen wir eine Textdatei, die wir hier MainfestMain.txt nennen wollen, mit dem Eintrag Main-Class.

Listing 28.1 MainfestMain.txt

Main-Class: Main

Unser Slider-Programm soll die Hauptklasse Main.class besitzen.

Nun lässt sich die Datei MainfestMain.txt mit der Manifest-Datei zusammenbinden und anschließend benutzen:

$ jar cmf MainfestMain.txt slider.jar Main.class 
$ java -jar slider.jar 
$ java -jar slider.jar Main

Hinweis Unter Java 6 integriert der Schalter -e (für endpoint) direkt die Angabe der ausführbaren Klasse in die Manifest-Datei des Java-Archivs.

$ jar cfe application.jar com.tutego.Main com/tutego/Main.class

Von der Kommandozeile oder mit Doppelklick starten

Starten wir den Interpreter java von der Kommandozeile, gibt die Option -jar das Archiv an, und der Interpreter sucht nach dem Startprogramm, das durch die Manifest-Datei gegeben ist.

$ java -jar JarDatei.jar

Ausführbare Java-Archive starten wir unter Windows mit einem Doppelklick, da die Dateiendung .jar dazu führt, dass javaw -jar mit dem Dateinamen ausgeführt wird. Auch Solaris ab 2.6 erkennt Jar-Dateien in der Konsole oder dem Desktop als ausführbare Programme und startet sie selbstständig mit java -jar.


Hinweis java (oder javaw) ignoriert die Angaben über -cp beziehungsweise Einträge in der Umgebungsvariable CLASSPATH, wenn ein Java-Programm mit – jar gestartet wird.


Das »Fat Jar Eclipse Plug-In« (http://fjep.sourceforge.net/) entpackt etwaige referenzierte Java-Archive und bündelt sie zu einem neuen großen Jar, das java -jar starten kann.


Galileo Computing - Zum Seitenanfang

28.4.4 Applets in Jar-Archiven topZur vorigen Überschrift

Jar-Archive sind für Applets ein Vorteil, da alle Dateien zusammen komprimiert übertragen werden und der Klassenlader nicht immer einzeln Klasse für Klasse beziehen muss. Im Applet-Tag stehen zusätzliche Archive im Attribut archive:

<applet 
  code="Main.class" archive="slider.jar" 
  width="320" height="200"> 
</applet>

Wie bei Applets erwarten wir hier das Archiv zusammen mit der Klasse und der HTML-Datei in einem gemeinsamen Verzeichnis. Befindet sich das Jar-Archiv in einem Unterverzeichnis applets, so schreiben wir stattdessen:

<applet 
  code="Main.class" archive="applets/slider.jar" 
  width="320" height="200"> 
</applet>


Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.






<< zurück
  Zum Katalog
Zum Katalog: Java ist auch eine Insel





Java ist auch eine Insel
Jetzt bestellen


 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Tipp
Zum Katalog: Coding for Fun





 Coding for Fun


 Buchempfehlungen
Zum Katalog: Objektorientierte Programmierung





 Objektorientierte
 Programmierung


Zum Katalog: Einstieg in Eclipse 3.4






 Einstieg in
 Eclipse 3.4


Zum Katalog: Java 6 lernen mit Eclipse






 Java 6 lernen
 mit Eclipse


Zum Katalog: NetBeans Platform 6






 NetBeans
 Platform 6


Zum Katalog: Java und XML






 Java und XML


Zum Katalog: Visual C# 2008






 Visual C# 2008


Zum Katalog: IT-Handbuch für Fachinformatiker






 IT-Handbuch für
 Fachinformatiker


Zum Katalog: C++ von A bis Z






 C++ von A bis Z


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Galileo Press 2009
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de