Wat is het JAR-bestandsformaat?
Bestanden met de extensie .jar zijn ZIP-archieven die door het Java-platform worden gebruikt om gecompileerde .class-bestanden, metadata en bronnen - zoals afbeeldingen, tekstbestanden en configuratiegegevens - te bundelen in één enkel draagbaar pakket. Het formaat werd geïntroduceerd met JDK 1.1 en blijft de primaire distributie-eenheid voor Java-bibliotheken en -applicaties.
Een .jar-bestand kan fungeren als een zelfstandig uitvoerbaar bestand wanneer het bestand META-INF/MANIFEST.MF een Main-Class-vermelding bevat. Wanneer het wordt gestart met java -jar file.jar, leest de JVM dit attribuut en start de aangewezen klasse, waardoor ontwikkelaars een volledige applicatie kunnen leveren als een enkel bestand dat draait op elk systeem met een compatibele runtime geïnstalleerd. Elke individuele vermelding in het archief kan ook onafhankelijk worden gecomprimeerd met het DEFLATE-algoritme, wat de pakketgrootte verkleint terwijl snelle willekeurige toegang tot individuele bestanden mogelijk blijft.
Onder de metadata die een .jar bevat, is het bestand META-INF/MANIFEST.MF het belangrijkste: het definieert hoe het pakket wordt gebruikt, vermeldt classpath-afhankelijkheden via Class-Path en kan beveiligingskenmerken bevatten. Digitale handtekeningen worden opgeslagen als afzonderlijke .SF- en .DSA/.RSA-bestanden in META-INF/, niet in het manifest zelf. Java 9 introduceerde twee verdere functies: Multi-Release JAR's plaatsen versiespecifieke klasse-overrides onder META-INF/versions/N/, en modulaire JAR's bevatten een module-info.class in de hoofdmap van het archief.
Om de inhoud van een .jar-bestand te bekijken of uit te pakken, kun je elk standaard ZIP-decompressieprogramma gebruiken en dezelfde acties uitvoeren als bij een normaal archief - het hernoemen naar .zip werkt eveneens. Je kunt ook het jar-commando gebruiken dat bij de JDK is inbegrepen:
- Inhoud weergeven:
jar -tf file.jar - Uitpakken:
jar -xf file.jar - Uitvoeren (indien uitvoerbaar):
java -jar file.jar
Gerelateerde archiefformaten aan de serverzijde zijn onder meer .war-bestanden voor webapplicaties en .ear-bestanden voor bedrijfsapplicaties, beide gebouwd op dezelfde op ZIP gebaseerde structuur.
Beveiliging & veiligheid
RISICO: MEDIUMEen uitvoerbare JAR is een echt programma: met Java geïnstalleerd voert „java -jar” de code uit die het bevat, met de rechten van jouw gebruiker - een onbekende JAR kan dus malware bevatten (Java RAT's en trojans zijn een bekende familie). Behandel een gedownloade JAR als elk ander .exe-bestand: voer alleen bestanden uit van een bron die je vertrouwt, en wees op je hoede voor ongevraagde .jar-bijlagen. Het louter inspecteren als een ZIP (7-Zip) is veilig; het uitvoeren ervan is het risico. Een JAR kan digitaal ondertekend zijn, maar een handtekening bewijst alleen de herkomst, niet de veiligheid.
Formaatdetails
in een notendopProgramma's die JAR-bestanden openen
Technische details
diepe specificaties| Containerformaat | ZIP-archief - deelt de `PK` (`50 4B 03 04`) magic bytes op offset 0 met alle standaard ZIP-bestanden |
| MIME-type | `application/java-archive` |
| Vereist intern bestand | `META-INF/MANIFEST.MF` - moet aanwezig zijn; beheert metadata, classpath en uitvoerbaar gedrag |
| Trigger voor uitvoerbare JAR | `Main-Class` attribuut in `MANIFEST.MF`; gestart met `java -jar file.jar` |
| Payload bytecode-formaat | Gecompileerde `.class`-bestanden met JVM-bytecode - platformonafhankelijk, geen native machinecode |
| Compressie per item | DEFLATE-algoritme (hetzelfde als ZIP); individuele items kunnen ook ongecomprimeerd worden opgeslagen voor snellere willekeurige toegang |
| Digitale handtekeningen | `.SF` handtekeningbestand gekoppeld aan een `.DSA` of `.RSA` sleutelbestand, beide opgeslagen in `META-INF/` |
| Classpath-declaratie | `Class-Path` manifest-attribuut bevat een door spaties gescheiden lijst van afhankelijke JAR's voor runtime-resolutie |
| Multi-Release JAR (MR-JAR) | Java 9+; versiespecifieke klasse-overrides geplaatst onder `META-INF/versions/N/` zodat nieuwere JVM's de juiste bytecode kiezen |
| Module-descriptor (JPMS) | Een modulaire JAR bevat `module-info.class` in de hoofdmap van het archief, wat het Java 9+ modulesysteem mogelijk maakt |
| Package sealing | `Sealed: true` in het manifest voorkomt dat andere JAR's tijdens runtime klassen in hetzelfde pakket injecteren |
| Uber/Fat JAR | Zelfstandige implementatievariant die alle afhankelijke JAR's insluit; vereist een aangepaste class loader zoals Spring Boot Loader |
| Uitgebracht | 1996-1997 (JDK 1.1) |
| Open standaard | Ja · royaltyvrij |
| Specificatie | docs.oracle.com |
JAR conversies
Community V&A
gevraagd door gebruikersNog geen vragen - wees de eerste om iets te vragen over JAR-bestanden.