Hvad er JAR-filformatet?
Filer med filtypen .jar er ZIP-arkiver, der bruges af Java-platformen til at samle kompilerede .class-filer, metadata og ressourcer - såsom billeder, tekstfiler og konfigurationsdata - i en enkelt bærbar pakke. Formatet blev introduceret med JDK 1.1 og er fortsat den primære distributionsenhed for Java-biblioteker og -applikationer.
En .jar-fil kan fungere som en selvstændig eksekverbar fil, når dens META-INF/MANIFEST.MF-fil angiver en Main-Class-indgang. Når den startes med java -jar file.jar, læser JVM denne egenskab og starter den angivne klasse, hvilket gør det muligt for udviklere at levere en komplet applikation som en enkelt fil, der kører på ethvert system med et kompatibelt runtime installeret. Hver enkelt post i arkivet kan også komprimeres uafhængigt ved hjælp af DEFLATE-algoritmen, hvilket reducerer pakkestørrelsen og samtidig giver hurtig tilfældig adgang til de enkelte filer.
Blandt de metadata, en .jar indeholder, er META-INF/MANIFEST.MF-filen den vigtigste: den definerer, hvordan pakken bruges, viser classpath-afhængigheder via Class-Path og kan indeholde sikkerhedsattributter. Digitale signaturer gemmes som separate .SF- og .DSA/.RSA-filer i META-INF/, ikke i selve manifestet. Java 9 introducerede to yderligere funktioner: Multi-Release JARs placerer versionsspecifikke klasse-overskrivelser under META-INF/versions/N/, og modulære JARs inkluderer en module-info.class i arkivets rod.
For at gennemse eller udpakke indholdet af en .jar-fil kan du bruge et hvilket som helst standard ZIP-udpakningsværktøj og udføre de samme handlinger som med et normalt arkiv - det fungerer lige så godt at omdøbe den til .zip. Du kan også bruge kommandoen jar, der følger med JDK:
- Vis indhold:
jar -tf file.jar - Udpak:
jar -xf file.jar - Kør (hvis eksekverbar):
java -jar file.jar
Relaterede arkivformater på serversiden inkluderer .war-filer til webapplikationer og .ear-filer til virksomhedsapplikationer, som begge er bygget på den samme ZIP-baserede struktur.
Sikkerhed og tryghed
RISIKO: MEDIUMEn kørbar JAR er et rigtigt program: med Java installeret udfører «java -jar» den kode, den indeholder, med din brugers tilladelser - så en ukendt JAR kan indeholde malware (Java RATs og trojanere er en kendt familie). Behandl en downloadet JAR som enhver .exe: kør kun dem fra en kilde, du har tillid til, og vær påpasselig med uopfordrede .jar-vedhæftninger. Det er sikkert blot at inspicere den som en ZIP (7-Zip); risikoen ligger i at køre den. En JAR kan være kodesigneret, men en signatur beviser kun oprindelsen, ikke sikkerheden.
Formatdetaljer
kort fortaltProgrammer der åbner JAR-filer
Tekniske detaljer
dyb specifikation| Containerformat | ZIP-arkiv - deler `PK` (`50 4B 03 04`) magic bytes ved offset 0 med alle standard ZIP-filer |
| MIME-type | `application/java-archive` |
| Påkrævet intern fil | `META-INF/MANIFEST.MF` - skal være til stede; styrer metadata, classpath og eksekverbar adfærd |
| Trigger for eksekverbar JAR | `Main-Class`-attribut i `MANIFEST.MF`; startes med `java -jar file.jar` |
| Payload bytecode-format | Kompilerede `.class`-filer indeholdende JVM-bytecode - platformsuafhængig, ikke native maskinkode |
| Komprimering pr. post | DEFLATE-algoritme (samme som ZIP); individuelle poster kan også gemmes ukomprimeret for hurtigere tilfældig adgang |
| Digitale signaturer | `.SF`-signaturfil parret med en `.DSA`- eller `.RSA`-nøglefil, begge gemt i `META-INF/` |
| Classpath-erklæring | `Class-Path` manifest-attribut viser mellemrumsseparerede afhængige JAR-filer til runtime-opløsning |
| Multi-Release JAR (MR-JAR) | Java 9+; versionsspecifikke klasse-overskrivelser placeret under `META-INF/versions/N/`, så nyere JVM'er vælger den rigtige bytecode |
| Modulbeskrivelse (JPMS) | En modulær JAR inkluderer `module-info.class` i arkivets rod, hvilket muliggør Java 9+ modulsystemet |
| Pakkeforsegling | `Sealed: true` i manifestet forhindrer andre JAR-filer i at injicere klasser i den samme pakke under kørsel |
| Uber/Fat JAR | Selvstændig distributionsvariant, der indlejrer alle afhængigheds-JAR-filer; kræver en brugerdefineret class loader såsom Spring Boot Loader |
| Udgivet | 1996-1997 (JDK 1.1) |
| Åben standard | Ja · royaltyfri |
| Specifikation | docs.oracle.com |
JAR-konverteringer
Fællesskabets Q&A
spurgt af brugereIngen spørgsmål endnu - vær den første til at spørge om JAR-filer.