Betydningen af ​​hovedmanifestattribut i en selvudførende JAR

1. Oversigt

Hver eksekverbar Java-klasse skal indeholde en vigtigste metode. Kort sagt, denne metode er et udgangspunkt for en applikation.

For at køre vores hovedmetode fra en selvudførende JAR-fil skal vi oprette en ordentlig manifestfil og pakke den sammen med vores kode. Denne manifestfil skal have en attribut til hovedmanifest, der definerer stien til klassen, der indeholder vores hovedmetode.

I denne vejledning viser vi, hvordan du gør det pakke en simpel Java-klasse som en selvudførende JAR og demonstrere vigtigheden af ​​en hovedmanifestattribut for en vellykket henrettelse.

2. Udførelse af en JAR uden hovedmanifestattributten

For at blive mere praktisk viser vi et eksempel på mislykket udførelse uden den korrekte manifestattribut.

Lad os skrive en simpel Java-klasse med en hovedmetode:

offentlig klasse AppExample {public static void main (String [] args) {System.out.println ("AppExample eksekveret!"); }} 

For at pakke vores eksempelklasse til et JAR-arkiv skal vi gå til skallen på vores operativsystem og kompilere det:

javac -d. AppExample.java 

Så kan vi pakke det i en JAR:

jar cvf eksempel.jar com / baeldung / manifest / AppExample.class 

Vores eksempel.jar indeholder en standardmanifestfil. Vi kan nu prøve at udføre JAR:

java -jar eksempel.jar 

Udførelsen mislykkes med en fejl:

ingen hovedmanifestattribut, i eksempel.jar 

3. Udførelse af en JAR med hovedmanifestattributten

Som vi har set, kunne JVM ikke finde vores vigtigste manifestattribut. På grund af det kunne den ikke finde vores hovedklasse indeholdende vores hovedmetode.

Lad os medtage en ordentlig manifestattribut i JAR sammen med vores kode. Vi bliver nødt til at oprette en MANIFEST.MF fil, der indeholder en enkelt linje:

Hovedklasse: com.baeldung.manifest.AppExample 

Vores manifest indeholder nu klassestien til vores udarbejdede AppExample.class.

Da vi allerede har samlet vores eksempelklasse, er der ingen grund til at gøre det igen.

Vi pakker det bare sammen med vores manifestfil:

jar cvmf MANIFEST.MF eksempel.jar com / baeldung / manifest / AppExample.class 

Denne gang udfører JAR som forventet og output:

AppExample udført!

4. Konklusion

I denne hurtige artikel viste vi, hvordan man pakker en simpel Java-klasse som en selvudførende JAR, og vi demonstrerede vigtigheden af ​​en hovedmanifestattribut i to enkle eksempler.

Den komplette kildekode til eksemplet er tilgængelig på GitHub. Dette er et Maven-baseret projekt, så det kan importeres og bruges som det er.