Više izdanja JAR datoteka s Mavenom

1. Uvod

Jedna od novih značajki koju nam donosi Java 9 je sposobnost izgradnje JAR-ova s ​​više izdanja (MRJAR). Kao što kaže prijedlog za poboljšanje JDK-a, to nam omogućuje da imamo različite verzije klase specifične za izdanje Java u istom JAR-u.

U ovom uputstvu istražujemo kako konfigurirati MRJAR datoteku pomoću Mavena.

2. Maven

Maven je jedan od najčešće korištenih alata za izgradnju u ekosustavu Java; jedna od njegovih mogućnosti je pakiranje projekta u JAR.

U sljedećim odjeljcima istražit ćemo kako ga koristiti za izradu MRJAR-a.

3. Uzorak projekta

Krenimo s osnovnim primjerom.

Prvo ćemo definirati klasu koja ispisuje trenutno korištenu Javinu verziju; prije Jave 9, jedan od pristupa koji bismo mogli koristiti bio je System.getProperty metoda:

javna klasa DefaultVersion {verzija javnog niza () {return System.getProperty ("java.version"); }}

Sada, od Jave 9 i dalje, možemo koristiti novo verzija metoda iz Vrijeme izvođenja razred:

javna klasa DefaultVersion {verzija javnog niza () {return Runtime.version (). toString (); }}

Ovom metodom možemo dobiti Runtime.Verzija instance klase koja nam daje informacije o JVM-u koji se koristi u novom formatu sheme niza verzija.

Uz to, dodajmo znak App klasa za prijavu verzije:

javna klasa App {private static final Logger logger = LoggerFactory.getLogger (App.class); javna statička void glavna (String [] args) {logger.info (String.format ("Pokreće se na% s", nova DefaultVersion (). verzija ())); }}

Na kraju, postavimo svaku verziju DefaultVersion u svoje src / glavni struktura direktorija:

├── pom.xml ├── src │ ├── glavni │ │ ├── java │ │ │ └── com │ │ │ └── baeldung │ │ │ └── multireleaseapp │ │ │ ├── DefaultVersion. java │ │ │ └── App.java │ │ └── java9 │ │ └── com │ │ └── baeldung │ │ └── multireleaseapp │ │ └── DefaultVersion.java 

4. Konfiguracija

Da bismo konfigurirali MRJAR iz gornjih klasa, trebamo upotrijebiti dva Maven dodatka: Compiler Plugin i JAR Plugin.

4.1. Dodatak za kompilator Maven

U dodatku Maven Compiler moramo konfigurirati po jedno izvršavanje za svaku Java verziju koju ćemo pakirati.

U ovom slučaju dodajemo dva:

   org.apache.maven.plugins maven-compiler-plugin compile-java-8 compile 1.8 1.8 compile-java-9 compile compile 9 $ {project.basedir} / src / main / java9 $ {project.build.outputDirectory} / META -INF / inačice / 9 

Upotrijebit ćemo prvo izvršenje compile-java-8 za kompilaciju naše klase Java 8 i compile-java-9 izvršenje za kompilaciju naše klase Java 9.

To možemo vidjeti potrebno je konfigurirati compileSourceRoot i outputDirectory oznake s odgovarajućim mapama za verziju Java 9.

Međutim, od maven-compiler-plugin 3.7.1, ne trebamo ručno postavljati izlazni direktorij. Umjesto toga, sve što moramo učiniti je omogućiti multiReleaseOutput imovine:

 9 $ {project.basedir} / src / main / java9 istina 

Kad se postavi na pravi, dodatak kompajlera premješta sve klase specifične za izdanje u META-INF / verzije / $ {izdanje} imenik. Napominjemo da moramo postaviti puštanje ovdje označite željenu Javinu verziju, inače dodatak kompajlera ne uspije.

4.2. Maven JAR dodatak

Koristimo dodatak JAR za postavljanje Više izdanja ulazak u pravi u našem NAJVIŠE datoteka. S ovom konfiguracijom, Java izvršavanje će izgledati unutar META-INF / verzije mapa naše JAR datoteke za klase specifične za verziju; inače se koriste samo osnovne klase.

Dodajmo i maven-jar-plugin konfiguracija:

 org.apache.maven.plugins maven-jar-plugin 3.2.0 true 

5. Ispitivanje

Vrijeme je da testiramo našu generiranu JAR datoteku.

Kada izvršimo s Javom 8, vidjet ćemo sljedeći izlaz:

[glavna] INFO com.baeldung.multireleaseapp.App - Radi na 1.8.0_252

Ali ako izvršimo s Javom 14, vidjet ćemo:

[glavna] INFO com.baeldung.multireleaseapp.App - Izvodi se 14.0.1 + 7

Kao što vidimo, sada koristi novi izlazni format. Imajte na umu da je, premda je naš MRJAR izrađen s Javom 9, kompatibilan s više glavnih verzija Java platforme.

6. Zaključak

U ovom kratkom vodiču vidjeli smo kako konfigurirati alat za izgradnju Maven za generiranje jednostavnog MRJAR-a.

Kao i uvijek, puni kod predstavljen u ovom vodiču dostupan je na GitHub-u.


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