Vad är filformatet JAR?
Filer med filändelsen .jar är ZIP-arkiv som används av Java-plattformen för att samla kompilerade .class-filer, metadata och resurser - såsom bilder, textfiler och konfigurationsdata - i ett enda portabelt paket. Formatet introducerades med JDK 1.1 och förblir den primära distributionsenheten för Java-bibliotek och applikationer.
En .jar-fil kan fungera som en fristående körbar fil när dess META-INF/MANIFEST.MF-fil anger en Main-Class-post. När den startas med java -jar file.jar läser JVM detta attribut och startar den angivna klassen, vilket gör att utvecklare kan leverera en komplett applikation som en enda fil som körs på alla system med en kompatibel runtime installerad. Varje enskild post inuti arkivet kan också komprimeras oberoende med DEFLATE-algoritmen, vilket minskar paketstorleken samtidigt som det tillåter snabb slumpmässig åtkomst till enskilda filer.
Bland den metadata en .jar bär med sig är filen META-INF/MANIFEST.MF den viktigaste: den definierar hur paketet används, listar classpath-beroenden via Class-Path och kan innehålla säkerhetsattribut. Digitala signaturer lagras som separata .SF- och .DSA/.RSA-filer inuti META-INF/, inte i själva manifestet. Java 9 introducerade ytterligare två funktioner: Multi-Release JARs placerar versionsspecifika klassöverskridningar under META-INF/versions/N/, och modulära JARs inkluderar en module-info.class i arkivets rot.
För att bläddra i eller extrahera innehållet i en .jar-fil kan du använda valfritt standardverktyg för ZIP-dekomprimering och utföra samma åtgärder som med ett vanligt arkiv - att byta namn till .zip fungerar lika bra. Du kan också använda kommandot jar som ingår i JDK:
- Lista innehåll:
jar -tf file.jar - Extrahera:
jar -xf file.jar - Kör (om körbar):
java -jar file.jar
Relaterade arkivformat på serversidan inkluderar .war-filer för webbapplikationer och .ear-filer för företagsapplikationer, båda byggda på samma ZIP-baserade struktur.
Säkerhet & trygghet
RISK: MEDIUMEn körbar JAR är ett riktigt program: med Java installerat kör «java -jar» den kod den innehåller med din användares behörigheter - så en okänd JAR kan innehålla skadlig kod (Java-RATs och trojaner är en känd familj). Hantera en nedladdad JAR som vilken .exe som helst: kör endast de från källor du litar på, och var vaksam på oväntade .jar-bilagor. Att bara inspektera den som en ZIP (7-Zip) är säkert; att köra den innebär risken. En JAR kan vara kodsignerad, men en signatur bevisar bara ursprung, inte säkerhet.
Formatdetaljer
i ett nötskalProgram som öppnar JAR-filer
Tekniska detaljer
djup specifikation| Containerformat | ZIP-arkiv - delar magic bytes `PK` (`50 4B 03 04`) vid offset 0 med alla standard-ZIP-filer |
| MIME-typ | `application/java-archive` |
| Obligatorisk intern fil | `META-INF/MANIFEST.MF` - måste finnas; styr metadata, classpath och körbart beteende |
| Trigger för körbar JAR | `Main-Class`-attribut i `MANIFEST.MF`; startas med `java -jar file.jar` |
| Bytecode-format för payload | Kompilerade `.class`-filer som innehåller JVM-bytecode - plattformsoberoende, inte nativ maskinkod |
| Komprimering per post | DEFLATE-algoritmen (samma som ZIP); enskilda poster kan också lagras okomprimerade för snabbare slumpmässig åtkomst |
| Digitala signaturer | `.SF`-signaturfil parad med en `.DSA`- eller `.RSA`-nyckelfil, båda lagrade inuti `META-INF/` |
| Classpath-deklaration | `Class-Path`-manifestattribut listar mellanslagsseparerade beroende JAR-filer för runtime-upplösning |
| Multi-Release JAR (MR-JAR) | Java 9+; versionsspecifika klassöverskridningar placerade under `META-INF/versions/N/` så att nyare JVM:er väljer rätt bytecode |
| Modulbeskrivning (JPMS) | En modulär JAR inkluderar `module-info.class` i arkivets rot, vilket möjliggör modulsysytemet i Java 9+ |
| Paketförsegling | `Sealed: true` i manifestet förhindrar andra JAR-filer från att injicera klasser i samma paket vid körning |
| Uber/Fat JAR | Självförsörjande distributionsvariant som bäddar in alla beroende JAR-filer; kräver en anpassad class loader såsom Spring Boot Loader |
| Släppt | 1996-1997 (JDK 1.1) |
| Öppen standard | Ja · royaltyfri |
| Specifikation | docs.oracle.com |
JAR-konverteringar
Frågor & svar
frågat av användareInga frågor än - bli den första att fråga om JAR-filer.