JAR-filer med flere frigivelser med Maven

1. Introduktion

En af de nye funktioner, som Java 9 giver os, er muligheden for at opbygge Multi-Release JAR'er (MRJAR). Som JDK Enhancement Proposal siger, tillader dette os at have forskellige Java-frigivelsesspecifikke versioner af en klasse i samme JAR.

I denne vejledning undersøger vi, hvordan du konfigurerer en MRJAR-fil ved hjælp af Maven.

2. Maven

Maven er et af de mest anvendte byggeværktøjer i Java-økosystemet; en af ​​dens muligheder er at pakke et projekt ind i en JAR.

I de følgende afsnit undersøger vi, hvordan du bruger det til at opbygge en MRJAR i stedet.

3. Eksempel på projekt

Lad os starte med et grundlæggende eksempel.

Først definerer vi en klasse, der udskriver den aktuelt anvendte Java-version; før Java 9 var en af ​​de tilgange, vi kunne bruge, System.getProperty metode:

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

Nu, fra Java 9 og fremefter, kan vi bruge det nye version metode fra Kørselstid klasse:

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

Med denne metode kan vi få en Kørselstid. Version klasseinstans, der giver os oplysninger om JVM, der er brugt i det nye version-streng-skemaformat.

Plus, lad os tilføje en App klasse for at logge versionen:

public class App {private static final Logger logger = LoggerFactory.getLogger (App.class); public static void main (String [] args) {logger.info (String.format ("Running on% s", new DefaultVersion (). version ())); }}

Lad os endelig placere hver version af Standardversion til sin egen src / main katalogstruktur:

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

4. Konfiguration

For at konfigurere MRJAR fra klasserne ovenfor skal vi bruge to Maven-plugins: Compiler Plugin og JAR Plugin.

4.1. Maven Compiler Plugin

I Maven Compiler Plugin skal vi konfigurere en udførelse for hver Java-version, vi pakker.

I dette tilfælde tilføjer vi to:

   org.apache.maven.plugins maven-compiler-plugin compile-java-8 kompilere 1,8 1,8 compile-java-9 kompilere kompilere 9 $ {project.basedir} / src / main / java9 $ {project.build.outputDirectory} / META -INF / versioner / 9 

Vi bruger den første udførelse kompilere-java-8 at sammensætte vores Java 8-klasse og kompilere-java-9 udførelse for at kompilere vores Java 9-klasse.

Det kan vi se det er nødvendigt at konfigurere compileSourceRoot og outputDirectory tags med de respektive mapper til Java 9-versionen.

Imidlertid fra og med maven-compiler-plugin 3.7.1, behøver vi ikke at indstille outputmappen manuelt. I stedet er alt, hvad vi skal gøre, at aktivere multiReleaseOutput ejendom:

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

Når indstillet til rigtigtcompiler-pluginet flytter alle frigivelsesspecifikke klasser til META-INF / versioner / $ {release} vejviser. Bemærk, at vi skal indstille frigøre tag til den ønskede Java-version her, ellers mislykkes compiler-pluginet.

4.2. Maven JAR-plugin

Vi bruger JAR-pluginet til at indstille Multi-frigivelse adgang til rigtigt i vores MANIFESTER fil. Med denne konfiguration vil Java-runtime se inde i META-INF / versioner mappe i vores JAR-fil til versionsspecifikke klasser; ellers anvendes kun basisklasser.

Lad os tilføje maven-jar-plugin konfiguration:

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

5. Testning

Det er tid til at teste vores genererede JAR-fil.

Når vi udfører med Java 8, ser vi følgende output:

[main] INFO com.baeldung.multireleaseapp.App - Kører den 1.8.0_252

Men hvis vi udfører med Java 14, ser vi:

[main] INFO com.baeldung.multireleaseapp.App - Kører den 14.0.1 + 7

Som vi kan se, bruger det nu det nye outputformat. Bemærk, at selvom vores MRJAR blev bygget med Java 9, er den kompatibel med flere store Java-platformversioner.

6. Konklusion

I denne korte vejledning så vi, hvordan man konfigurerer Maven-byggeværktøjet til at generere en simpel MRJAR.

Som altid er den fulde kode, der præsenteres i denne vejledning, tilgængelig på GitHub.


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