JAR-Datei: Unterschied zwischen den Versionen
(Die Seite wurde neu angelegt: Eine JAR-Datei ('''''J'''ava '''Ar'''chive''), ist ein Archiv, welches auf dem ZIP-Format basiert. JAR-Dateien sind identisch zu ZIP-Dateien nur um einen Ordner ''M...) |
K (→JAR-Datei erstellen) |
||
(32 dazwischenliegende Versionen von 5 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
− | Eine JAR-Datei ('''''J'''ava '''Ar'''chive''), ist ein Archiv, welches auf dem [[ZIP]]-Format basiert. JAR-Dateien sind identisch | + | Eine JAR-Datei ('''''J'''ava '''Ar'''chive''), ist ein Archiv, welches auf dem [[ZIP]]-Format basiert. JAR-Dateien sind also identisch mit ZIP-Dateien, sind aber um einen Ordner ''META-INF'' erweitert, der dem Interpreter weitere Informationen zur JAR-Datei liefert. |
− | JAR-Dateien werden | + | JAR-Dateien werden verwendet, um die einzelnen Dateien eines Projekts zusammen zufassen. So sind in einem Archiv häufig neben [[Class]]-Dateien auch multimediale Inhalte zu finden (Bilder, Sound etc.). |
+ | |||
+ | Daher unterscheiden wir JAR-Dateien in Java-Anwendungen und Java-Biliotheken, die wiederum Java-Anwendungen um Funktionen erweitern. | ||
+ | |||
+ | Enthält eine JAR-Datei ein Verzeichnis META-INF mit einer Manifest-Datei mit einem Eintrag für eine Startklasse (Main-Class), kann eine die JAR-Datei bei passender JRE per Mausklick gestartet werden. | ||
=META-INF= | =META-INF= | ||
− | Der META-INF Ordner enthält immer eine Datei MANIFEST.MF, in dieser werden Informationen über das Archiv bzw. das Programm beschrieben. | + | Der META-INF Ordner enthält immer eine Datei MANIFEST.MF, in dieser werden Informationen über das Archiv bzw. das Programm beschrieben. |
+ | |||
+ | Wenn eine JAR-Datei [[Java-Applets und Java WebStart-Anwendungen signieren|signiert]] wird, wird automatisch eine Signaturdatei generiert und im META-INF- Verzeichnis der JAR-Datei abgelegt , das auch das Manifest des Archivs enthält. Signaturdateien haben Dateinamen mit der Erweiterung .SF . Außerdem eine Signaturblock-Datei mit der Dateiendung .DSA. | ||
+ | |||
+ | Die Mindestausführung einer Manifest-Datei sieht bspw. so aus: | ||
+ | Manifest-Version: 1.0 | ||
+ | Main-Class: HelloWorld | ||
+ | [LEERZEILE] | ||
==MANIFEST.MF== | ==MANIFEST.MF== | ||
− | In der Manifest-Datei werden verschiedene Eigenschaften beschrieben. Die Eigenschaften werden durch einen Tupel von Schlüsselwort und Wert angegeben. Für verschiedene Bereiche der Verwendung, sind auch verschiedene Eigenschaften vorgesehen: | + | In der Manifest-Datei werden verschiedene Eigenschaften beschrieben. Die Eigenschaften werden durch einen Tupel von Schlüsselwort und Wert angegeben. |
+ | Für verschiedene Bereiche der Verwendung, sind auch verschiedene Eigenschaften vorgesehen: | ||
{| {{Prettytable}} | {| {{Prettytable}} | ||
! Bereich | ! Bereich | ||
Zeile 42: | Zeile 54: | ||
| Class-Path | | Class-Path | ||
| Angabe von Klassen und JAR-Dateien, die zum [[Classpath]] hinzugefügt werden sollen, sie sollten immer mit ./ beginend angegeben werden | | Angabe von Klassen und JAR-Dateien, die zum [[Classpath]] hinzugefügt werden sollen, sie sollten immer mit ./ beginend angegeben werden | ||
− | | | + | | Ja |
+ | |- | ||
+ | | | ||
+ | | Permissions | ||
+ | | Seit Java 7 Update 51 ist die Permissions-Angabe anzugeben. Gültig sind <code>sandbox</code> (keine Rechteerweiterung benötigt) und <code>all-permissions</code> (z.B. für Schreib-/Leserechte). (Mehr dazu unter [https://docs.oracle.com/javase/8/docs/technotes/guides/deploy/manifest.html#A1148525 Permissions]) | ||
+ | | Nein (nur für Applets und WebStart) | ||
+ | |- | ||
+ | | | ||
+ | | Application-Name | ||
+ | | Hier muss der Name der Anwendung angegeben werden. (Mehr dazu unter [https://docs.oracle.com/javase/8/docs/technotes/guides/deploy/manifest.html#A1148568 Application-Name]) | ||
+ | | Nein (nur für Applets und WebStart) | ||
+ | |- | ||
+ | | | ||
+ | | Codebase | ||
+ | | Hier muss die Quell-Domain, also der Herkunftsort angegeben werden. (Mehr dazu unter [https://docs.oracle.com/javase/8/docs/technotes/guides/deploy/manifest.html#CIHJIIHD Codebase]) | ||
+ | | Nein (nur für Applets und WebStart) | ||
|- | |- | ||
| Anwendungen | | Anwendungen | ||
| Main-Class | | Main-Class | ||
| Angabe der Mainclass, sie ist nötig wenn die JAR-Datei ausführbar sein soll | | Angabe der Mainclass, sie ist nötig wenn die JAR-Datei ausführbar sein soll | ||
− | | | + | | Ja (wenn es kein ausführbares Programm ist) |
+ | |- | ||
+ | | | ||
+ | | SplashScreen-Image | ||
+ | | Angabe eines Bildes, das als Splash-Screen angezeigt wird. Das Bild muss in der JAR vorhanden sein. | ||
+ | | Ja | ||
|- | |- | ||
| Applets | | Applets | ||
Zeile 79: | Zeile 111: | ||
| | | | ||
|- | |- | ||
− | | | + | | Extensions |
| Extension-Name | | Extension-Name | ||
| | | | ||
Zeile 140: | Zeile 172: | ||
|- | |- | ||
|} | |} | ||
+ | Jede Manifest-Datei muss mit einer Leerzeile abgeschlossen werden. | ||
+ | |||
+ | ==Beispiel einer Manifest-Datei== | ||
+ | Manifest-Version: 1.0 | ||
+ | Created-By: Eagle Projekt Manager 1.1.0.0 | ||
+ | Permissions: all-permissions | ||
+ | Codebase: *.eagleside.de | ||
+ | Application-Name: DatabaseDesigner | ||
+ | Main-Class: de.eagleside.databasedesigner.DatabaseDesignerMain | ||
+ | CLASS-PATH: ./lib/jdom.jar ./lib/EagleSwingLibrary.jar ./lib/EagleUtilLibrary.jar | ||
+ | [Leerzeile!] | ||
+ | |||
+ | Es ist üblich, Abhängigkeiten in einem Unterverzeichnis relativ zur Programm-Jar-Datei abzulegen. | ||
+ | Laufwerksangaben sind systemabhängig, daher sollte darauf verzichtet werden. | ||
+ | |||
+ | =JAR-Datei erstellen= | ||
+ | Um eine JAR-Datei aus einem fertig kompilierten Projekt auf einer Kommandozeile zu erstellen, ist prinzipiell folgender Befehl anzuwenden: | ||
+ | jar cvfm MeinJar.jar manifest.txt input-file(s) | ||
+ | Das ''input-file(s)'' ist eine Liste von einer oder mehreren Dateien, die die Jar-Datei enthalten soll. Mehrere Dateien werden mit einem Leerzeichen voneinander abgegrenzt. Mehrere Dateien gleichen Typs können mit einem Wildcard-Symbol (*) angegeben werden. Wenn ein zu speicherndes Element ein Verzeichnis ist, werden die Inhalte dieses Verzeichnisses rekursiv der Jar-Datei hinzugefügt. | ||
+ | Einen Sonderfall stellt der Punkt am Ende einer solchen Anweisung dar. Der Punkt sagt aus, dass der Inhalt des Verzeichnisses, von dem aus aus der Jar-Befehl gestartet wurde ins Jar-Archiv eingefügt werden soll. | ||
+ | jar cvfm MeinJar.jar manifest.txt . | ||
+ | Der Befehl erzeigt eine Jar-Datei, die eine Manifest-Datei enthält, sowie alle Verzeichnisse und Dateien des Verzeichnisses, von dem heraus der Jar-Befehl gestartet wurde. | ||
+ | |||
+ | Auch folgender Befehl zum Erzeugen einer Jar-Datei ist gültig: | ||
+ | jar cvfm MeinJar.jar manifest.txt icons audio *.class Lizenz.txt | ||
+ | Der Jar-Datei wird ein Manifest hinzugefügt. Außerdem wird es Verzeichnisse mit Icons und Audiodateien (icons, audio) enthalten, in denen die Programm-Icons und einige Sound-Dateien abgelegt wurden. Schließlich noch alle Class-Dateien und eine Lizenz-Datei. | ||
+ | Die meisten verfügbares [[IDE]]s haben bereits Funktionen an Bord, die das komfortabel per Mausklick erledigen können. | ||
+ | |||
+ | =JAR-Datei ausführen= | ||
+ | Um die Programmausführung einer Java-Anwendung, die in einer einer JAR-Datei gespeichert ist, per Doppelklick zu starten ist es notwendig, dass die Dateiendung (.jar) mit dem Java-Interpreter verknüpft ist. Normalerweise ist das bei Windows-System der Fall. Bei Linux-Systemen muss da oft nachgeholfen werden. | ||
+ | |||
+ | Tipp: Wie Sie vorgehen, wenn eine Jar-Datei nicht startet, erfahren Sie im Artikel [[Jar-Datei mit Doppelklick nicht ausführbar]]. | ||
+ | |||
+ | Neben dem Start per Mausklick, ist aber insbesondere der Start in der Befehlszeile wichtig, um [[Was ist eine Exception|Exceptions]], die während der Ausführung in die Java-Console geworfen werden, lesen zu können. Folgender Befehl startet die Ausführung einer Anwendung, die in einer JAR-Datei gespeichert ist: | ||
+ | java -jar MeinJar.jar | ||
+ | |||
+ | {{Fragen stellen}} | ||
=Quellen= | =Quellen= | ||
− | [ | + | *[https://docs.oracle.com/javase/8/docs/technotes/guides/jar/jar.html JAR File Specification] |
+ | *[http://docs.oracle.com/javase/tutorial/deployment/jar/index.html Packaging Programs in JAR Files] | ||
+ | |||
+ | =Links= | ||
+ | *[https://www.java-blog-buch.de/070404-jar-klassen-zusammenfassen-und-ausfuhren/ Java-Blog-Buch: Jar - Klassen zusammenfassen und ausführen] | ||
[[Kategorie:Java]] | [[Kategorie:Java]] | ||
+ | [[Kategorie:Java Grundlagen]] |
Aktuelle Version vom 18. November 2023, 15:18 Uhr
Eine JAR-Datei (Java Archive), ist ein Archiv, welches auf dem ZIP-Format basiert. JAR-Dateien sind also identisch mit ZIP-Dateien, sind aber um einen Ordner META-INF erweitert, der dem Interpreter weitere Informationen zur JAR-Datei liefert.
JAR-Dateien werden verwendet, um die einzelnen Dateien eines Projekts zusammen zufassen. So sind in einem Archiv häufig neben Class-Dateien auch multimediale Inhalte zu finden (Bilder, Sound etc.).
Daher unterscheiden wir JAR-Dateien in Java-Anwendungen und Java-Biliotheken, die wiederum Java-Anwendungen um Funktionen erweitern.
Enthält eine JAR-Datei ein Verzeichnis META-INF mit einer Manifest-Datei mit einem Eintrag für eine Startklasse (Main-Class), kann eine die JAR-Datei bei passender JRE per Mausklick gestartet werden.
Inhaltsverzeichnis
META-INF
Der META-INF Ordner enthält immer eine Datei MANIFEST.MF, in dieser werden Informationen über das Archiv bzw. das Programm beschrieben.
Wenn eine JAR-Datei signiert wird, wird automatisch eine Signaturdatei generiert und im META-INF- Verzeichnis der JAR-Datei abgelegt , das auch das Manifest des Archivs enthält. Signaturdateien haben Dateinamen mit der Erweiterung .SF . Außerdem eine Signaturblock-Datei mit der Dateiendung .DSA.
Die Mindestausführung einer Manifest-Datei sieht bspw. so aus:
Manifest-Version: 1.0 Main-Class: HelloWorld [LEERZEILE]
MANIFEST.MF
In der Manifest-Datei werden verschiedene Eigenschaften beschrieben. Die Eigenschaften werden durch einen Tupel von Schlüsselwort und Wert angegeben. Für verschiedene Bereiche der Verwendung, sind auch verschiedene Eigenschaften vorgesehen:
Bereich | Attribut | Beschreibung | Optional |
---|---|---|---|
Allgemein | Manifest-Version | Versionsnummer für die Manifest-Datei | Nein |
Created-By | Optionale Angabe des Erstellers | Ja | |
Name | Angabe des Namens einer Datei, z.B. für eine Signatur oder Bean | Ja | |
SHA1-Digest | SHA1 Signatur für die darüber angegebene Datei | Ja | |
Signature-Version | Definiert die Version der Signatur | Ja | |
Class-Path | Angabe von Klassen und JAR-Dateien, die zum Classpath hinzugefügt werden sollen, sie sollten immer mit ./ beginend angegeben werden | Ja | |
Permissions | Seit Java 7 Update 51 ist die Permissions-Angabe anzugeben. Gültig sind sandbox (keine Rechteerweiterung benötigt) und all-permissions (z.B. für Schreib-/Leserechte). (Mehr dazu unter Permissions)
|
Nein (nur für Applets und WebStart) | |
Application-Name | Hier muss der Name der Anwendung angegeben werden. (Mehr dazu unter Application-Name) | Nein (nur für Applets und WebStart) | |
Codebase | Hier muss die Quell-Domain, also der Herkunftsort angegeben werden. (Mehr dazu unter Codebase) | Nein (nur für Applets und WebStart) | |
Anwendungen | Main-Class | Angabe der Mainclass, sie ist nötig wenn die JAR-Datei ausführbar sein soll | Ja (wenn es kein ausführbares Programm ist) |
SplashScreen-Image | Angabe eines Bildes, das als Splash-Screen angezeigt wird. Das Bild muss in der JAR vorhanden sein. | Ja | |
Applets | Extension-List | ||
*-Extension-Name | |||
*-Specification-Version | |||
*-Implementation-Version | |||
*-Implementation-Vendor-Id | |||
*-Implementation-URL | |||
Extensions | Extension-Name | ||
Implementation-Title | |||
Implementation-Vendor | |||
Implementation-Vendor-Id | |||
Implementation-URL | |||
Specification-Title | |||
Specification-Version | |||
Specification-Vendor | |||
Sealed | |||
J2EE | Java-Bean | Definiert eine Java Bean Klasse | |
x-Digest-y | |||
Magic |
Jede Manifest-Datei muss mit einer Leerzeile abgeschlossen werden.
Beispiel einer Manifest-Datei
Manifest-Version: 1.0 Created-By: Eagle Projekt Manager 1.1.0.0 Permissions: all-permissions Codebase: *.eagleside.de Application-Name: DatabaseDesigner Main-Class: de.eagleside.databasedesigner.DatabaseDesignerMain CLASS-PATH: ./lib/jdom.jar ./lib/EagleSwingLibrary.jar ./lib/EagleUtilLibrary.jar [Leerzeile!]
Es ist üblich, Abhängigkeiten in einem Unterverzeichnis relativ zur Programm-Jar-Datei abzulegen. Laufwerksangaben sind systemabhängig, daher sollte darauf verzichtet werden.
JAR-Datei erstellen
Um eine JAR-Datei aus einem fertig kompilierten Projekt auf einer Kommandozeile zu erstellen, ist prinzipiell folgender Befehl anzuwenden:
jar cvfm MeinJar.jar manifest.txt input-file(s)
Das input-file(s) ist eine Liste von einer oder mehreren Dateien, die die Jar-Datei enthalten soll. Mehrere Dateien werden mit einem Leerzeichen voneinander abgegrenzt. Mehrere Dateien gleichen Typs können mit einem Wildcard-Symbol (*) angegeben werden. Wenn ein zu speicherndes Element ein Verzeichnis ist, werden die Inhalte dieses Verzeichnisses rekursiv der Jar-Datei hinzugefügt. Einen Sonderfall stellt der Punkt am Ende einer solchen Anweisung dar. Der Punkt sagt aus, dass der Inhalt des Verzeichnisses, von dem aus aus der Jar-Befehl gestartet wurde ins Jar-Archiv eingefügt werden soll.
jar cvfm MeinJar.jar manifest.txt .
Der Befehl erzeigt eine Jar-Datei, die eine Manifest-Datei enthält, sowie alle Verzeichnisse und Dateien des Verzeichnisses, von dem heraus der Jar-Befehl gestartet wurde.
Auch folgender Befehl zum Erzeugen einer Jar-Datei ist gültig:
jar cvfm MeinJar.jar manifest.txt icons audio *.class Lizenz.txt
Der Jar-Datei wird ein Manifest hinzugefügt. Außerdem wird es Verzeichnisse mit Icons und Audiodateien (icons, audio) enthalten, in denen die Programm-Icons und einige Sound-Dateien abgelegt wurden. Schließlich noch alle Class-Dateien und eine Lizenz-Datei. Die meisten verfügbares IDEs haben bereits Funktionen an Bord, die das komfortabel per Mausklick erledigen können.
JAR-Datei ausführen
Um die Programmausführung einer Java-Anwendung, die in einer einer JAR-Datei gespeichert ist, per Doppelklick zu starten ist es notwendig, dass die Dateiendung (.jar) mit dem Java-Interpreter verknüpft ist. Normalerweise ist das bei Windows-System der Fall. Bei Linux-Systemen muss da oft nachgeholfen werden.
Tipp: Wie Sie vorgehen, wenn eine Jar-Datei nicht startet, erfahren Sie im Artikel Jar-Datei mit Doppelklick nicht ausführbar.
Neben dem Start per Mausklick, ist aber insbesondere der Start in der Befehlszeile wichtig, um Exceptions, die während der Ausführung in die Java-Console geworfen werden, lesen zu können. Folgender Befehl startet die Ausführung einer Anwendung, die in einer JAR-Datei gespeichert ist:
java -jar MeinJar.jar
Fragen
Das Thema wurde nicht ausreichend behandelt? Du hast Fragen dazu und brauchst weitere Informationen? Lass Dir von uns helfen!
- Besuche uns im Byte-Welt-Forum
- Besuche unseren Chat
Wir helfen dir gerne!
Dir hat dieser Artikel gefallen? Oder Du hast Fehler entdeckt und möchtest zur Berichtigung beitragen? Prima! Schreibe einen Kommentar!
Du musst angemeldet sein, um einen Kommentar abzugeben.