JAR-filer med flere utgivelser med Maven

1. Introduksjon

En av de nye funksjonene som Java 9 gir oss, er muligheten til å bygge Multi-Release JAR (MRJAR). Som JDK Enhancement Proposal sier, lar dette oss ha forskjellige Java-utgivelsesspesifikke versjoner av en klasse i samme JAR.

I denne opplæringen undersøker vi hvordan du konfigurerer en MRJAR-fil ved hjelp av Maven.

2. Maven

Maven er et av de mest brukte byggeverktøyene i Java-økosystemet; en av funksjonene er å pakke et prosjekt inn i en JAR.

I de følgende avsnittene vil vi utforske hvordan du bruker den til å bygge en MRJAR i stedet.

3. Eksempel på prosjekt

La oss starte med et grunnleggende eksempel.

Først definerer vi en klasse som skriver ut Java-versjonen som for øyeblikket brukes; før Java 9, var en av tilnærmingene vi kunne bruke System.getProperty metode:

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

Nå, fra Java 9 og fremover, kan vi bruke det nye versjon metoden fra Kjøretid klasse:

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

Med denne metoden kan vi få en Kjøretid. Versjon klasseinstans som gir oss informasjon om JVM som brukes i det nye versjonsstrengskjemaformatet.

I tillegg, la oss legge til en App klasse for å logge versjonen:

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 ())); }}

Til slutt, la oss plassere hver versjon av Standardversjon inn i sitt eget src / main katalogstruktur:

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

4. Konfigurasjon

For å konfigurere MRJAR fra klassene ovenfor, må vi bruke to Maven-plugins: Compiler Plugin og JAR Plugin.

4.1. Maven Compiler Plugin

I Maven Compiler Plugin må vi konfigurere en kjøring for hver Java-versjon vi pakker.

I dette tilfellet legger vi til 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 / versjoner / 9 

Vi bruker den første henrettelsen kompilere-java-8 for å kompilere vår Java 8-klasse og kompilere-java-9 utførelse for å kompilere Java 9-klassen.

Vi kan se det det er nødvendig å konfigurere compileSourceRoot og outputDirectory koder med de respektive mappene for Java 9-versjonen.

Imidlertid pr maven-compiler-plugin 3.7.1, trenger vi ikke å sette utdatakatalogen manuelt. I stedet er alt vi trenger å gjøre å aktivere multiReleaseOutput eiendom:

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

Når satt til ekte, flytter kompilator-pluginet alle utgivelsesspesifikke klasser til META-INF / versjoner / $ {release} katalog. Vær oppmerksom på at vi må stille inn utgivelse tag til ønsket Java-versjon her, ellers mislykkes kompilator-plugin.

4.2. Maven JAR Plugin

Vi bruker JAR-plugin for å stille inn Multi-Release inngang til ekte i vår MANIFESTER fil. Med denne konfigurasjonen vil Java-kjøretiden se inn i META-INF / versjoner mappe med JAR-filen vår for versjonsspesifikke klasser; ellers brukes bare basisklassene.

La oss legge til maven-jar-plugin konfigurasjon:

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

5. Testing

Det er på tide å teste den genererte JAR-filen vår.

Når vi kjører med Java 8, ser vi følgende utdata:

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

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

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

Som vi kan se, bruker den nå det nye utdataformatet. Merk at selv om MRJAR ble bygget med Java 9, er den kompatibel med flere store Java-plattformversjoner.

6. Konklusjon

I denne korte opplæringen så vi hvordan du konfigurerer Maven-bygningsverktøyet for å generere en enkel MRJAR.

Som alltid er den fullstendige koden som er presentert i denne opplæringen, tilgjengelig på GitHub.


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