Vejledning til jlink

1. Oversigt

jlink er et værktøj, der genererer et brugerdefineret Java-runtime-billede, der kun indeholder de platformsmoduler, der kræves til en given applikation.

Et sådant runtime-billede fungerer nøjagtigt som JRE, men indeholder kun de moduler, vi valgte, og de afhængigheder, de har brug for for at fungere. Begrebet modulære runtime-billeder blev introduceret i JEP 220.

I denne vejledning lærer vi, hvordan du opretter en brugerdefineret JRE ved hjælp af jlink, og vi vil også køre og teste, at vores modul fungerer korrekt inde i vores JRE.

2. Brug for at oprette en brugerdefineret JRE

Lad os forstå motivationen bag brugerdefinerede runtime-billeder med et eksempel.

Vi opretter en simpel modulær applikation. For at vide mere om oprettelse af modulære applikationer henvises til vores artikel om modulære forhold.

Lad os først oprette en Hej Verden klasse og et tilsvarende modul:

offentlig klasse HelloWorld {privat statisk endelig Logger LOG = Logger.getLogger (HelloWorld.class.getName ()); offentlig statisk ugyldig hoved (String [] args) {LOG.info ("Hello World!"); }}
modul jlinkModule {kræver java.logging; }

For at køre dette program har vi kun brug for Hej Verden,Snor, Loggerog Objekt klasser.

Selvom dette program kun har brug for fire klasser for at køre, bliver alle de foruddefinerede klasser i JRE også eksekveret, selvom vores program ikke kræver dem.

For at køre et lille program er vi derfor nødt til at opretholde en komplet JRE, som simpelthen er spild af hukommelse.

Så en tilpasset JRE er den bedste mulighed for at køre vores eksempel.

Med jlink, kan vi oprette vores egen, lille JRE, der kun indeholder de relevante klasser, som vi vil bruge uden at spilde hukommelse, og som et resultat vil vi se øget ydeevne.

3. Opbygning af brugerdefinerede Java Runtime-billeder

Vi udfører en række enkle trin for at oprette brugerdefinerede JRE-billeder.

3.1. Kompilering af et modul

Lad os først kompilere ovennævnte program fra kommandolinjen:

javac -d out module-info.java
javac -d ud - modul-sti ud com \ baeldung \ jlink \ HelloWorld.java

Lad os nu køre programmet:

java --module-sti ud - modul jlinkModule / com.baeldung.jlink.HelloWorld

Outputtet vil være:

13. marts 2019 10:15:40 com.baeldung.jlink.HelloWorld vigtigste INFO: Hej verden!

3.2. Ved brug af jdeps for at angive de afhængige moduler

For at bruge jlink, skal vi kende listen over de JDK-moduler, som applikationen bruger, og som vi skal medtage i vores brugerdefinerede JRE.

Lad os bruge jdeps kommando for at få de afhængige moduler, der bruges i applikationen:

jdeps - modul-sti ud -s - modul jlinkModule

Outputtet vil være:

jlinkModule -> java.base jlinkModule -> java.logging

Dette giver mening, som java.base er det nødvendige minimumsmodul til Java-kodebiblioteker, og java.logging bruges af en logger i vores program.

3.3. Oprettelse af en brugerdefineret JRE med jlink

For at oprette en brugerdefineret JRE til en modulbaseret applikation kan vi bruge jlink kommando. Her er dens grundlæggende syntaks:

jlink [optioner] –modul-sti modulsti – tilføj-modul modul [, modul ...] - output 

Lad os nu Opret en brugerdefineret JRE til vores program ved hjælp af Java 11:

jlink - modul-sti "% JAVA_HOME% \ jmods"; out --add-modules jlinkModule - output customjre

Her er værdien efter –Add-moduler parameter fortæller jlink hvilket modul der skal medtages i JRE.

Endelig blev customjre ved siden af -produktion parameter definerer målmappen, hvor vores brugerdefinerede JRE skal genereres.

Bemærk, vi bruger Windows shell til at udføre alle kommandoer i hele denne tutorial. Linux- og Mac-brugere skal muligvis justere dem lidt.

3.4. Kørsel af et program med det genererede billede

Nu har vi vores brugerdefinerede JRE oprettet af jlink.

For at teste vores JRE, lad os prøve at køre vores modul ved at navigere inde i beholder mappe til vores customjre bibliotek og kør kommandoen nedenfor:

java --module jlinkModule / com.baeldung.jlink.HelloWorld

Igen ser Windows-skalen, som vi bruger, i den aktuelle mappe efter enhver eksekverbar, inden du fortsætter til PATH. Vi er nødt til at være ekstra opmærksomme på at faktisk køre vores brugerdefinerede JRE og ikke java løst mod en PATH, når vi bruger Linux eller Mac.

4. Oprettelse af brugerdefineret JRE med Launcher-scripts

Valgfrit, Vi kan også oprette en brugerdefineret JRE med eksekverbar launcher scripts.

Til dette er vi nødt til at køre jlink kommando, der har en ekstra –Luncher parameter til at oprette vores launcher med vores modul og hovedklasse:

jlink --launcher customjrelauncher = jlinkModule / com.baeldung.jlink.HelloWorld --modul-sti "% JAVA_HOME% \ jmods"; out --add-modules jlinkModule --output customjre

Dette genererer to scripts: customjrelauncher.bat og customjrelauncher inde i vores customjre / bin vejviser.

Lad os køre scriptet:

customjrelauncher.bat

Og output vil være:

18. marts 2019 12:34:21 com.baeldung.jlink.HelloWorld vigtigste INFO: Hej verden!

5. Konklusion

I denne vejledning har vi lært, hvordan vi kan oprette en brugerdefineret, modulær JRE med jlink der kun indeholder de absolut nødvendige filer til vores modul. Vi undersøgte også, hvordan man opretter en brugerdefineret JRE med launcher-scripts, der let kan udføres og sendes.

Brugerdefinerede, modulære Java-runtime-billeder er kraftfulde. Målene for oprettelse af brugerdefinerede JRE'er er klare: de sparer på hukommelse, forbedrer ydeevnen og forbedrer også sikkerhed og vedligeholdelse. Letvægts tilpassede JRE'er giver os også mulighed for at oprette skalerbare applikationer til små enheder.

Kodestykker, der bruges i denne vejledning, er tilgængelige via Github.


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