Forstå JAR Manifest File

1. Introduksjon

Et Java-arkiv (JAR) er beskrevet av manifestfilen. Denne artikkelen utforsker dens mange muligheter, inkludert å legge til attribusjon, gjøre JAR kjørbar og legge inn versjonsinformasjon.

La oss begynne med en rask gjennomgang av hva en manifestfil er.

2. Manifestfilen

Manifestfilen heter MANIFEST.MF og ligger under META-INF katalog i JAR. Det er rett og slett en liste over nøkkel- og verdipar, kalt topptekster eller attributter, gruppert i seksjoner.

Disse topptekster levere metadata som hjelper oss med å beskrive aspekter av JAR, for eksempel versjoner av pakker, hvilken applikasjonsklasse vi skal utføre, klassestien, signaturmateriale og mye mer.

3. Legge til en manifestfil

3.1. Standardmanifestet

En manifestfil legges til automatisk hver gang vi oppretter en JAR.

For eksempel, hvis vi bygger en JAR i OpenJDK 11:

jar cf MyJar.jar klasser /

Det produserer en veldig enkel manifestfil:

Manifest-versjon: 1.0 Laget av: 11.0.3 (AdoptOpenJDK)

3.2. Et tilpasset manifest

Eller vi kan spesifisere vår egen manifestfil.

La oss for eksempel si at vi har en tilpasset manifestfil kalt manifest.txt:

Bygget av: baeldung

Vi kan inkludere denne filen og krukke vil flett den med standard manifestfilen når vi bruker m alternativ:

jar cfm MyJar.jar manifest.txt klasser /

Deretter er den resulterende manifestfilen:

Manifest-versjon: 1.0 Innebygd av: baeldung Laget av: 11.0.3 (AdoptOpenJDK)

3.3. Maven

Nå, innholdet i standardmanifestfilen endres avhengig av hvilke verktøy vi bruker.

For eksempel legger Maven til noen ekstra overskrifter:

Manifest-versjon: 1.0 Archiver-versjon: Plexus Archiver opprettet av: Apache Maven 3.3.9 Bygget av: baeldung Build-Jdk: 11.0.3

Vi kan faktisk tilpasse disse topptekstene i vår pom.

Si for eksempel at vi vil indikere hvem JAR ble opprettet av og pakken:

 org.apache.maven.plugins maven-jar-plugin 3.1.2 com.baeldung.java baeldung 

Dette produserer en manifestfil med en tilpasset pakke og laget av overskrifter:

Manifest-versjon: 1.0 Build-Jdk-Spec: 11 Package: com.baeldung.java Laget av: baeldung 

Se Maven JAR-plugin-dokumentasjonen for en komplett liste over alternativene.

4. Overskrifter

En overskrift må følge et bestemt format og være atskilt med en ny linje:

nøkkel1: verdi1 Nøkkel2: verdi2

En gyldig overskrift må ha et mellomrom mellom kolon og verdi. Et annet viktig poeng er der må være en ny linje på slutten av filen. Ellers blir den siste overskriften ignorert.

La oss se på noen av standardoverskriftene fra spesifikasjonen og noen vanlige egendefinerte overskrifter.

4.1. Hovedoverskrifter

Hovedoverskrifter gir vanligvis generell informasjon:

  • Manifest-versjon: versjonen av spesifikasjonen
  • Laget av: verktøyversjonen og leverandøren som opprettet manifestfilen
  • Multi-Release: hvis ekte, så er dette en Multi-Release Jar
  • Bygd av: denne egendefinerte overskriften gir navnet på brukeren som opprettet manifestfilen

4.2. Inngangssted og klassesti

Hvis JAR-en vår inneholder en applikasjon som kan kjøres, kan vi spesifisere inngangspunktet. På samme måte kan vi tilby klassesti. Ved å gjøre det, unngår vi å måtte spesifisere det når vi vil kjøre det.

  • Hovedklasse: pakken og navnet på klassen med en hovedmetode (ingen .klasseutvidelse)
  • Klassesti: en romskilt liste over relative stier til biblioteker eller ressurser

For eksempel hvis programinngangspunktet vårt er i Application.class og det bruker biblioteker og ressurser, så kan vi legge til de nødvendige overskriftene:

Hovedklasse: com.baeldung.Application Class-Path: core.jar lib / properties /

Klassestien inkluderer core.jar og alle filene i lib og eiendommer kataloger. Disse eiendelene lastes i forhold til der JAR utføres, og ikke fra selve JAR. De må med andre ord eksistere utenfor JAR.

4.3. Pakkeversjon og forsegling

Disse standardoverskriftene beskriver pakkene i JAR.

  • Navn: pakken
  • Implementering-Build-Date: byggedato for implementeringen
  • Implementering-tittel: tittelen på implementeringen
  • Implementering-leverandør: leverandøren for implementeringen
  • Implementeringsversjon: implementeringsversjonen
  • Spesifikasjon-Tittel: tittelen på spesifikasjonen
  • Spesifikasjon-leverandør: leverandøren for spesifikasjonen
  • Spesifikasjon-versjon: spesifikasjonsversjonen
  • Forseglet: hvis det er sant, kommer alle klassene for pakken fra samme JAR (standard er falsk)

For eksempel finner vi disse manifestoverskriftene i MySQL-driver Connector / J JAR. De beskriver versjonen av JDBC-spesifikasjonen JAR oppfyller, samt versjonen av driveren selv:

Spesifikasjon-tittel: JDBC Spesifikasjon-versjon: 4.2 Spesifikasjon-leverandør: Oracle Corporation Implementation-tittel: MySQL-kontakt / J Implementeringsversjon: 8.0.16 Implementering-leverandør: Oracle

4.4. Signert Jar

Vi kan signere JAR digitalt for å gi ekstra sikkerhet og bekreftelse. Selv om denne prosessen er utenfor omfanget av denne artikkelen, å gjøre dette legger til standard overskrifter som viser hver signert klasse og dens kodede signatur til manifestfilen. Se JAR-signeringsdokumentasjonen for mer informasjon.

4.5. OSGI

Det er vanlig å også se de tilpassede overskriftene for OSGI-pakker:

  • Pakke-navn: tittel
  • Bunt-symbolsk navn: en unik identifikator
  • Pakkeversjon: versjon
  • Import-pakke: pakker og versjoner pakken avhenger av
  • Eksport-pakke: pakkepakker og versjoner tilgjengelig for bruk

Se vår introduksjon til OSGI-artikkelen for å lære mer om OSGI-pakker.

5. Seksjoner

Det er to typer seksjoner i en manifestfil, hoved og per oppføring. Overskrifter som vises i hoveddelen, gjelder for alt i JAR. Mens overskrifter som vises i avsnittene per oppføring, gjelder bare for den valgte pakken eller klassen.

I tillegg overstyrer en topptekst i en seksjon per oppføring den samme overskriften i hovedseksjonen. Det er vanlig at seksjoner per oppføring inneholder informasjon om pakkeversjoner og forsegling pluss digital signering.

La oss se på et enkelt eksempel på en seksjon per oppføring:

Implementering-Tittel: baeldung-eksempler Implementering-Versjon: 1.0.1 Implementering-Leverandør: Baeldung Sealed: true Navn: com / baeldung / utils / Sealed: false

Hoveddelen øverst har forseglet alle pakker i vår JAR. Imidlertid pakken com.baeldung.utils er forseglet av delen per oppføring.

6. Konklusjon

Denne artikkelen gir en oversikt over hvordan du legger til en manifestfil til en JAR, hvordan du bruker seksjoner og noen vanlige overskrifter. Strukturen til manifestfilen lar oss gi standardinformasjon, for eksempel versjonsinformasjon.

Fleksibiliteten gjør det imidlertid mulig for oss å definere hvilken informasjon vi finner relevant for å beskrive innholdet i JAR-ene våre.


$config[zx-auto] not found$config[zx-overlay] not found