Was ist das JAR-Dateiformat?
Dateien mit der .jar-Erweiterung sind ZIP-Archive, die von der Java-Plattform verwendet werden, um kompilierte .class-Dateien, Metadaten und Ressourcen - wie Bilder, Textdateien und Konfigurationsdaten - in einem einzigen portablen Paket zu bündeln. Das Format wurde mit JDK 1.1 eingeführt und ist nach wie vor die primäre Verteilungseinheit für Java-Bibliotheken und -Anwendungen.
Eine .jar-Datei kann als eigenständige ausführbare Datei fungieren, wenn ihre META-INF/MANIFEST.MF-Datei einen Main-Class-Eintrag angibt. Beim Start mit java -jar file.jar liest die JVM dieses Attribut und startet die bezeichnete Klasse, sodass Entwickler eine vollständige Anwendung als Einzeldatei versenden können, die auf jedem System mit einer kompatiblen Laufzeitumgebung läuft. Jeder einzelne Eintrag im Archiv kann auch unabhängig mit dem DEFLATE-Algorithmus komprimiert werden, was die Paketgröße reduziert und gleichzeitig schnellen Direktzugriff auf einzelne Dateien ermöglicht.
Unter den Metadaten, die eine .jar enthält, ist die META-INF/MANIFEST.MF-Datei die wichtigste: Sie definiert die Verwendung des Pakets, listet Classpath-Abhängigkeiten über Class-Path auf und kann Sicherheitsattribute enthalten. Digitale Signaturen werden als separate .SF- und .DSA/.RSA-Dateien in META-INF/ gespeichert, nicht im Manifest selbst. Java 9 führte zwei weitere Funktionen ein: Multi-Release-JARs platzieren versionsspezifische Klassen-Überschreibungen unter META-INF/versions/N/, und modulare JARs enthalten eine module-info.class im Archivstamm.
Um den Inhalt einer .jar-Datei zu durchsuchen oder zu extrahieren, können Sie jedes Standard-ZIP-Dekomprimierungswerkzeug verwenden und dieselben Aktionen wie bei einem normalen Archiv ausführen - das Umbenennen in .zip funktioniert ebenso. Sie können auch den mit dem JDK mitgelieferten jar-Befehl verwenden:
- Inhalt auflisten:
jar -tf file.jar - Extrahieren:
jar -xf file.jar - Ausführen (wenn ausführbar):
java -jar file.jar
Verwandte serverseitige Archivformate umfassen .war-Dateien für Web-Anwendungen und .ear-Dateien für Unternehmensanwendungen, beide auf derselben ZIP-basierten Struktur aufgebaut.
Sicherheit
RISIKO: MEDIUMEine ausführbare JAR ist ein echtes Programm: Mit installiertem Java führt 'java -jar' den enthaltenen Code mit den Berechtigungen des Benutzers aus - eine unbekannte JAR kann also Malware enthalten (Java-RATs und Trojaner sind eine bekannte Schadsoftwarefamilie). Behandeln Sie eine heruntergeladene JAR wie jede .exe: Führen Sie nur solche aus, denen Sie vertrauen, und seien Sie vorsichtig bei unerwünschten .jar-Anhängen. Das reine Prüfen als ZIP (7-Zip) ist sicher; das Ausführen ist das Risiko. Eine JAR kann codesigniert sein, aber eine Signatur beweist nur die Herkunft, nicht die Sicherheit.
Formatdetails
kurz gefasstProgramme zum Öffnen von JAR-Dateien
Technische Details
technische Spezifikation| Containerformat | ZIP-Archiv - teilt die `PK`-Signatur (`50 4B 03 04`) bei Offset 0 mit allen Standard-ZIP-Dateien |
| MIME-Typ | `application/java-archive` |
| Erforderliche interne Datei | `META-INF/MANIFEST.MF` - muss vorhanden sein; steuert Metadaten, Classpath und ausführbares Verhalten |
| Auslöser für ausführbare JAR | `Main-Class`-Attribut in `MANIFEST.MF`; gestartet mit `java -jar file.jar` |
| Nutzlast-Bytecode-Format | Kompilierte `.class`-Dateien mit JVM-Bytecode - plattformunabhängig, kein nativer Maschinencode |
| Komprimierung pro Eintrag | DEFLATE-Algorithmus (wie bei ZIP); einzelne Einträge können auch unkomprimiert gespeichert werden für schnelleren Direktzugriff |
| Digitale Signaturen | `.SF`-Signaturdatei gepaart mit einer `.DSA`- oder `.RSA`-Schlüsseldatei, beide in `META-INF/` gespeichert |
| Classpath-Deklaration | `Class-Path`-Manifestattribut listet durch Leerzeichen getrennte abhängige JARs für die Laufzeitauflösung auf |
| Multi-Release-JAR (MR-JAR) | Java 9+; versionsspezifische Klassen-Überschreibungen unter `META-INF/versions/N/` platziert, damit neuere JVMs den richtigen Bytecode auswählen |
| Moduldeskriptor (JPMS) | Eine modulare JAR enthält `module-info.class` im Archivstamm und ermöglicht so das Java-9+-Modulsystem |
| Paketversiegelung | `Sealed: true` im Manifest verhindert, dass andere JARs zur Laufzeit Klassen in dasselbe Paket einschleusen |
| Uber/Fat JAR | Eigenständige Bereitstellungsvariante, die alle abhängigen JARs einbettet; erfordert einen benutzerdefinierten Klassenlader wie Spring Boot Loader |
| Veröffentlicht | 1996-1997 (JDK 1.1) |
| Offener Standard | Ja · lizenzgebührenfrei |
| Spezifikation | docs.oracle.com |
JAR-Konvertierungen
Community Q&A
von Nutzern gefragtNoch keine Fragen - stellen Sie die erste Frage zu JAR-Dateien.