Multi-Release JAR súbory s Maven

1. Úvod

Jednou z nových funkcií, ktoré nám Java 9 prináša, je schopnosť zostavovať súbory Multi-Release JAR (MRJAR). Ako hovorí návrh vylepšenia JDK, umožňuje nám to mať v jednom JAR rôzne verzie triedy špecifické pre vydanie Java.

V tomto tutoriáli skúmame, ako nakonfigurovať súbor MRJAR pomocou Mavenu.

2. Maven

Maven je jedným z najpoužívanejších nástrojov na zostavenie v ekosystéme Java; jednou z jeho schopností je zabalenie projektu do súboru JAR.

V nasledujúcich častiach preskúmame, ako ho použiť na zostavenie MRJAR.

3. Ukážkový projekt

Začnime základným príkladom.

Najskôr definujeme triedu, ktorá vytlačí aktuálne používanú verziu Java; pred Java 9 bol jedným z prístupov, ktorý sme mohli použiť, System.getProperty metóda:

public class DefaultVersion {public String version () {return System.getProperty ("java.version"); }}

Teraz, od Java 9 a ďalej, môžeme používať nový verzia metóda z Beh programu trieda:

public class DefaultVersion {public String version () {return Runtime.version (). toString (); }}

Touto metódou môžeme získať a Runtime.Verzia inštancia triedy, ktorá nám poskytuje informácie o JVM použitom v novom formáte schémy verzie-reťazec.

Navyše pridajme App trieda na prihlásenie verzie:

public class App {private static final Logger logger = LoggerFactory.getLogger (App.class); public static void main (String [] args) {logger.info (String.format ("Beží na% s", nová DefaultVersion (). verzia ())); }}

Na záver umiestnime každú verziu aplikácie DefaultVersion do svojej vlastnej src / main adresárová štruktúra:

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

4. Konfigurácia

Na konfiguráciu MRJAR z vyššie uvedených tried musíme použiť dva doplnky Maven: Plugin kompilátora a Plugin JAR.

4.1. Doplnok Maven Compiler

V doplnku Maven Compiler Plugin musíme nakonfigurovať jedno spustenie pre každú verziu Java, ktorú zabalíme.

V tomto prípade pridáme dve:

   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 / verzie / 9 

Použijeme prvé prevedenie zostaviť-java-8 zostaviť našu triedu Java 8 a zostaviť-java-9 prevedenie na zostavenie našej triedy Java 9.

To vidíme je potrebné nakonfigurovať compileSourceRoot a outputDirectory štítky s príslušnými zložkami pre verziu Java 9.

Avšak od maven-compiler-plugin 3.7.1, výstupný adresár nemusíme nastavovať manuálne. Namiesto toho musíme len povoliť multiReleaseOutput nehnuteľnosť:

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

Keď je nastavené na pravda, doplnok kompilátora presunie všetky triedy špecifické pre vydanie do META-INF / verzie / $ {vydanie} adresár. Upozorňujeme, že musíme nastaviť prepustenie tu označte požadovanú verziu Java, inak zlyhá doplnok kompilátora.

4.2. Doplnok Maven JAR

Používame doplnok JAR na nastavenie Viacnásobné uvoľnenie vstup do pravda v našom MANIFEST spis. S touto konfiguráciou sa runtime Java bude pozerať dovnútra META-INF / verzie priečinok nášho súboru JAR pre triedy špecifické pre verziu; inak sa používajú iba základné triedy.

Pridajme maven-jar-plugin konfigurácia:

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

5. Testovanie

Je čas vyskúšať náš vygenerovaný súbor JAR.

Keď vykonáme program Java 8, zobrazí sa nasledujúci výstup:

[main] INFO com.baeldung.multireleaseapp.App - beží na 1.8.0_252

Ale ak vykonáme s Java 14, uvidíme:

[hlavné] INFO com.baeldung.multireleaseapp.App - beží na 14.0.1 + 7

Ako vidíme, teraz používa nový výstupný formát. Upozorňujeme, že hoci bol náš MRJAR postavený na prostredí Java 9, je kompatibilný s viacerými hlavnými verziami platformy Java.

6. Záver

V tomto krátkom tutoriáli sme videli, ako nakonfigurovať nástroj na zostavenie Maven na generovanie jednoduchého MRJAR.

Celý kód uvedený v tomto tutoriále je ako vždy k dispozícii na GitHub.


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