Forståelse af JAR Manifest File

1. Introduktion

Et Java-arkiv (JAR) er beskrevet af dets manifestfil. Denne artikel udforsker dens mange muligheder, herunder tilføjelse af tilskrivning, gør JAR eksekverbar og indlejrer versionsoplysninger.

Lad os dog begynde med en hurtig gennemgang af, hvad en manifestfil er.

2. Manifestfilen

Manifestfilen er navngivet MANIFEST.MF og er placeret under META-INF katalog i JAR. Det er simpelthen en liste over nøgle- og værdipar, kaldet overskrifter eller egenskaber, grupperet i sektioner.

Disse overskrifter levere metadata, der hjælper os med at beskrive aspekter af vores JAR, såsom versioner af pakker, hvilken applikationsklasse vi skal udføre, klassestien, signaturmateriale og meget mere.

3. Tilføjelse af en manifest fil

3.1. Standardmanifestet

En manifestfil tilføjes automatisk, hver gang vi opretter en JAR.

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

jar cf MyJar.jar klasser /

Det producerer en meget enkel manifestfil:

Manifest-version: 1.0 Oprettet af: 11.0.3 (AdoptOpenJDK)

3.2. En brugerdefineret manifest

Eller vi kan specificere vores egen manifestfil.

Lad os for eksempel sige, at vi har en brugerdefineret manifestfil kaldet manifest.txt:

Bygget af: baeldung

Vi kan medtage denne fil og krukke vilje flet det med standardmanifestfilen når vi bruger m mulighed:

jar cfm MyJar.jar manifest.txt klasser /

Derefter er den resulterende manifestfil:

Manifest-version: 1.0 Indbygget af: baeldung Oprettet af: 11.0.3 (AdoptOpenJDK)

3.3. Maven

Nu er indholdet af standardmanifestfilen skift afhængigt af hvilke værktøjer vi bruger.

For eksempel tilføjer Maven nogle ekstra overskrifter:

Manifest-version: 1.0 Arkiver-version: Plexus Archiver Oprettet af: Apache Maven 3.3.9 Bygget af: baeldung Build-Jdk: 11.0.3

Vi kan faktisk tilpasse disse overskrifter i vores pom.

Sig for eksempel, at vi vil angive, hvem JAR blev oprettet af, og pakken:

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

Dette producerer en manifestfil med en brugerdefineret pakke og lavet af overskrifter:

Manifest-version: 1.0 Build-Jdk-Spec: 11 Pakke: com.baeldung.java Oprettet af: baeldung 

Se Maven JAR-plugin-dokumentationen for en komplet liste over mulighederne.

4. Overskrifter

En overskrift skal følge et bestemt format og være adskilt af en ny linje:

key1: værdi1 Key2: værdi2

En gyldig overskrift skal have et mellemrum mellem kolon og værdien. Et andet vigtigt punkt er der skal være en ny linje i slutningen af ​​filen. Ellers ignoreres den sidste header.

Lad os se på nogle af standardoverskrifterne fra specifikationen og nogle almindelige brugerdefinerede overskrifter.

4.1. Hovedoverskrifter

Hovedoverskrifter giver typisk generel information:

  • Manifest-version: versionen af ​​specifikationen
  • Lavet af: værktøjsversionen og leverandøren, der oprettede manifestfilen
  • Multi-frigivelse: hvis rigtigt, så er dette en Multi-Release Jar
  • Indbygget: denne brugerdefinerede overskrift giver navnet på den bruger, der oprettede manifestfilen

4.2. Indgangssted og klassesti

Hvis vores JAR indeholder en applikation, der kan køres, kan vi angive indgangspunktet. Tilsvarende kan vi levere klassesti. Ved at gøre dette undgår vi at skulle specificere det, når vi vil køre det.

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

For eksempel, hvis vores applikationsindgangspunkt er i Application.class og det bruger biblioteker og ressourcer, så kan vi tilføje de nødvendige overskrifter:

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

Klassestien inkluderer core.jar og alle filerne i lib og ejendomme mapper. Disse aktiver indlæses i forhold til hvor JAR udføres og ikke indefra JAR selv. Med andre ord skal de eksistere uden for JAR.

4.3. Pakkeversion og forsegling

Disse standardoverskrifter beskriver pakkerne inden for JAR.

  • Navn: pakken
  • Implementering-build-dato: byggedato for implementeringen
  • Implementering-titel: titlen på implementeringen
  • Implementering-leverandør: leverandøren til implementeringen
  • Implementeringsversion: implementeringsversionen
  • Specifikation-titel: titlen til specifikationen
  • Specifikation-leverandør: leverandøren til specifikationen
  • Specifikation-version: specifikationsversionen
  • Forseglet: hvis det er sandt, kommer alle klasser til pakken fra den samme JAR (standard er falsk)

For eksempel finder vi disse manifeste overskrifter i MySQL driver Connector / J JAR. De beskriver versionen af ​​JDBC-specifikationen, som JAR opfylder, samt selve driveren:

Specifikation-titel: JDBC Specifikation-version: 4.2 Specifikation-leverandør: Oracle Corporation Implementation-titel: MySQL-stik / J Implementerings-version: 8.0.16 Implementering-leverandør: Oracle

4.4. Underskrevet krukke

Vi kan underskrive vores JAR digitalt for at tilføje ekstra sikkerhed og verifikation. Selvom denne proces er uden for denne artikels anvendelsesområde, dette tilføjer standardoverskrifter, der viser hver signeret klasse og dens kodede signatur til manifestfilen. Se JAR-underskrivelsesdokumentationen for flere detaljer.

4.5. OSGI

Det er almindeligt at også se de brugerdefinerede overskrifter til OSGI-bundter:

  • Bundle-navn: titel
  • Bundle-symbolsk navn: en unik identifikator
  • Bundle-version: version
  • Import-pakke: pakker og versioner, bundtet afhænger af
  • Eksport-pakke: bundtpakker og versioner tilgængelige til brug

Se vores introduktion til OSGI-artiklen for at lære mere om OSGI-bundter.

5. Sektioner

Der er to typer sektioner i en manifestfil, hoved- og per-post. Overskrifter, der vises i hovedsektionen, gælder for alt i JAR. Der henviser til overskrifter, der vises i sektionerne pr. indgang, gælder kun for den navngivne pakke eller klasse.

Derudover tilsidesætter en overskrift i en sektion pr. Indgang den samme overskrift i hovedsektionen. Det er almindeligt, at sektioner pr. Indgang indeholder oplysninger om pakkeversioner og forsegling plus digital signering.

Lad os se på et simpelt eksempel på en sektion pr. Indgang:

Implementering-titel: baeldung-eksempler Implementering-version: 1.0.1 Implementering-leverandør: Baeldung forseglet: sandt Navn: com / baeldung / utils / forseglet: falsk

Hovedafsnittet øverst har forseglet alle pakker inden for vores JAR. Imidlertid pakken com.baeldung.utils er ikke forseglet af sektionen pr. indgang.

6. Konklusion

Denne artikel giver et overblik over, hvordan du tilføjer en manifestfil til en JAR, hvordan du bruger sektioner og nogle almindelige overskrifter. Strukturen i manifestfilen giver os mulighed for at levere standardoplysninger, såsom versionoplysninger.

Dens fleksibilitet giver os dog mulighed for at definere, hvilke oplysninger vi finder relevante for at beskrive indholdet af vores JAR'er.


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