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.