JAR (Java Archive)
JAR-filer (Java Archive) er arkiver, der pakker flere Java-komponenter sammen i én fil – typisk klassefiler, ressourcer og metadata. Formatet bygger på ZIP-kompression og bruges til at samle det, en Java applikation har brug for, i én overskuelig pakke. JAR-filer er centrale i Java udvikling, fordi de gør det enklere at distribuere og installere software.
Et konkret eksempel: Har du skrevet et lille regnskabsprogram i Java bestående af ti klassefiler, et par ikoner og en konfigurationsfil, kan du samle det hele i én JAR-fil.
Brugeren skal derefter blot have en JAR-fil liggende og en installeret Java Runtime Environment, i stedet for at skulle håndtere ti enkeltfiler og en mappestruktur.
Hvad er JAR-filer (Java Archive) – definition og grundlæggende
En JAR-fil er et platformuafhængigt pakkeformat, der samler kompilerede klassefiler, ressourcer som billeder og tekstfiler samt en manifestfil med metadata. Fordi formatet følger ZIP specifikationen, kan almindelige arkivprogrammer som WinZip eller 7-Zip i praksis åbne en JAR-fil, men det er Javas eget jar-værktøj, der er beregnet til at oprette og administrere dem korrekt.
Ved at samle en samling filer og biblioteker i én pakke bliver det lettere at distribuere Java applikationer og biblioteker. Installation af et Java-program bliver mere håndterbart, fordi brugeren ikke selv skal lede efter enkeltfiler eller sikre, at alle afhængigheder er til stede. JAR-formatet muliggør, at et Java program kan køres, uden at manglende afhængigheder skaber problemer – forudsat at de nødvendige biblioteker er pakket med eller tilgængelige via klassestien.
Klassestien er den liste af mapper og arkiver, hvor Java leder efter de klassefiler, et program har brug for under kørsel. Uden korrekt opsat klassesti kan et program fejle, selv om alle filerne faktisk findes på maskinen.
Vigtige egenskaber ved JAR-filer
- JAR-filer samler flere Java-relaterede filer – klassefiler, ressourcer og metadata – i ét arkiv.
- De forenkler distribution ved at pakke afhængigheder og klassefiler i ét arkiv.
- De køres på enhver platform, der understøtter en JVM.
- En JAR-fil kan indeholde eksekverbar kode og metadata i en manifestfil.
- Digitale signaturer kan bruges til at verificere en JAR fils integritet og herkomst.
Fordele ved at bruge JAR-filer
JAR-filer komprimerer indholdet, hvilket typisk reducerer den samlede filstørrelse med omkring 30-40 procent afhængigt af, hvilke filtyper der indgår – tekst og kode komprimerer normalt bedre end billeder eller lyd. Det gør overførsel over netværk hurtigere og letter installationen, fordi der skal transporteres mindre data.
Digitale signaturer i JAR-filer kan bruges til at verificere en fils integritet og herkomst. En udvikler signerer arkivet, så modtageren kan kontrollere, at indholdet stammer fra den angivne kilde og ikke er blevet ændret undervejs. Det er relevant, når applikationer distribueres til brugere, der ikke selv har adgang til kildekoden.
En JAR-fil kan indeholde alt, hvad en Java-applikation skal bruge for at køre – forudsat at manifestfilen peger på den rigtige hovedklasse. Derfor er JAR-filer i mange tilfælde standarden ved distribution af Java-applikationer og biblioteker frem for at sende enkeltfiler separat.
Manifestfilen: struktur og vigtige attributter
Hver JAR-fil indeholder præcis én manifestfil, som altid ligger på stien META-INF/MANIFEST.MF. Denne fil beskriver arkivets indhold og kan bruges til at angive den klasse, programmet skal starte fra, samt versionsoplysninger og eventuelle klassesti-afhængigheder.
De vigtigste felter i en manifestfil er blandt andet Manifest-Version, som angiver formatets version, Main-Class, som fortæller Java Virtual Machine, hvilken klasse der indeholder programmets hovedmetode, og Class-Path, som kan pege på eksterne biblioteker, programmet har brug for. Uden en Main-Class-angivelse kan en JAR-fil ikke køres selvstændigt med kommandoen java -jar.
Sådan opretter og bruger man JAR-filer
For at lave JAR-filer bruger du kommandolinjeværktøjet “jar”, som følger med Java Development Kit (JDK). En moderne IDE kan ofte automatisere disse trin, men det er nyttigt at kende kommandoerne bag ved:
jar cf <jarfil> <inputfiler>– opretter en ny JAR-fil med navnet og indholdet, du angiver.jar tf <jarfil>– viser en indholdsfortegnelse over, hvad arkivet indeholder.jar xf <jarfil>– udtrækker indholdet af en eksisterende JAR-fil.jar uf <jarfil> <nyefiler>– opdaterer en eksisterende JAR-fil med nye eller ændrede filer, uden at hele arkivet skal genskabes.java -jar <jarfil>– kører en JAR-fil, forudsat at manifestfilen angiver en Main-Class.
JAR-filer kan også inkludere eksterne biblioteker ved, at du tilføjer dem til klassestien, når JAR-filen laves, eller ved at angive dem via Class-Path-feltet i manifestfilen. Det gør det muligt at genbruge eksisterende Java-biblioteker uden at skulle konfigurere afhængigheder manuelt hver gang.
Bruger du et byggeværktøj som Maven eller et versionsstyringssystem som Git til projektet, håndteres afhængigheder og pakning af JAR-filer typisk automatisk som en del af byggeprocessen. Mange Java-baserede frameworks leveres da også selv som JAR-filer, der kan lægges ind i et projekts klassesti.
JAR-filer og zipfiler – hvad er forskellen?
JAR-filer følger ZIP-formatets specifikation, hvilket er grunden til, at almindelige zipprogrammer kan åbne dem. Forskellen ligger i indholdet og formålet: en JAR-fil indeholder altid en manifestfil, som beskriver arkivets Java specifikke indhold, og kan gøres eksekverbar via en Main-Class-angivelse. En almindelig zipfil har ingen tilsvarende standardiseret metadatastruktur og er ikke beregnet til at kunne køres som et program.