Több kiadású JAR fájlok Maven-nel

1. Bemutatkozás

A Java 9 egyik új funkciója a Multi-Release JAR (MRJAR) felépítésének képessége. Ahogy a JDK Enhancement javaslat mondja, ez lehetővé teszi számunkra, hogy egy osztály különböző Java kiadás-specifikus verziói legyenek ugyanabban a JAR-ban.

Ebben az oktatóanyagban azt vizsgáljuk, hogyan konfigurálható egy MRJAR fájl a Maven használatával.

2. Maven

A Maven az egyik leggyakrabban használt építőeszköz a Java ökoszisztémában; egyik képessége egy projekt JAR-ba csomagolása.

A következő szakaszokban azt vizsgáljuk, hogyan lehetne MRJAR-t készíteni ehelyett.

3. Minta projekt

Kezdjük egy alap példával.

Először meghatározunk egy osztályt, amely kinyomtatja a jelenleg használt Java verziót; Java 9 előtt az egyik megközelítés, amelyet használhattunk, a System.getProperty módszer:

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

Most, a Java 9-től kezdve, használhatjuk az újat változat módszer a Futásidő osztály:

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

Ezzel a módszerrel a Futásidejű verzió osztálypéldány, amely információt nyújt az új verzió-karakterlánc séma formátumban használt JVM-ről.

Ráadásul tegyünk hozzá egy App osztály a verzió naplózásához:

public class App {private static final Logger logger = LoggerFactory.getLogger (App.class); public static void main (String [] args) {logger.info (String.format ("Futás% s-on", új DefaultVersion (). verzió ())); }}

Végül helyezzük el a DefaultVersion a sajátjába src / main könyvtár felépítése:

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

4. Konfiguráció

Az MRJAR konfigurálásához a fenti osztályokból két Maven beépülő modult kell használnunk: a Compiler plugint és a JAR plugint.

4.1. Maven Compiler plugin

A Maven Compiler beépülő modulban minden végrehajtandó Java-verzióhoz egy végrehajtást kell konfigurálnunk.

Ebben az esetben kettőt adunk hozzá:

   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 / verziók / 9 

Az első végrehajtást használjuk fordítsd-java-8 Java 8 osztályunk és a compile-java-9 végrehajtás a Java 9 osztályunk fordításához.

Ezt láthatjuk konfigurálni kell a compileSourceRoot és kimeneti könyvtár címkéket a Java 9 verzió megfelelő mappáival.

Azonban a maven-compiler-plugin 3.7.1, nem kell manuálisan beállítanunk a kimeneti könyvtárat. Ehelyett csak annyit kell tennünk, hogy engedélyezzük a multiReleaseOutput ingatlan:

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

Ha beállítva igaz, a fordító plugin az összes kiadásspecifikus osztályt a META-INF / verziók / $ {release} Könyvtár. Felhívjuk figyelmét, hogy be kell állítanunk a kiadás itt jelölje be a kívánt Java verziót, különben a fordító plugin nem sikerül.

4.2. Maven JAR bővítmény

A JAR plugint használjuk a Több kiadás belépés ide igaz miénkben NYILVÁNVALÓ fájl. Ezzel a konfigurációval a Java futásideje a META-INF / verziók a JAR fájl mappája verzióspecifikus osztályokhoz; egyébként csak az alaposztályokat használják.

Tegyük hozzá a maven-jar-plugin konfiguráció:

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

5. Tesztelés

Itt az ideje tesztelni a létrehozott JAR fájlt.

Amikor a Java 8 alkalmazással hajtunk végre, a következő kimenetet látjuk:

[main] INFO com.baeldung.multireleaseapp.App - Az 1.8.0_252 verzión fut

De ha Java 14-tel hajtunk végre, akkor a következőket látjuk:

[main] INFO com.baeldung.multireleaseapp.App - 14.0.1 + 7-en fut

Mint láthatjuk, most az új kimeneti formátumot használja. Vegye figyelembe, hogy bár az MRJAR-junkat Java 9-gyel építettük, kompatibilis több nagy Java-platform verzióval.

6. Következtetés

Ebben a rövid bemutatóban láttuk, hogyan kell konfigurálni a Maven build eszközt egy egyszerű MRJAR létrehozására.

Mint mindig, az oktatóanyagban bemutatott teljes kód elérhető a GitHubon.