Útmutató a jlinkhez

1. Áttekintés

jlink egy olyan eszköz, amely egyedi Java futásidejű képet állít elő, amely csak az adott alkalmazáshoz szükséges platformmodulokat tartalmazza.

Egy ilyen futásidejű kép pontosan úgy működik, mint a JRE, de csak az általunk kiválasztott modulokat és a működésükhöz szükséges függőségeket tartalmazza. A moduláris futásidejű képek fogalmát a JEP 220-ban vezették be.

Ebben az oktatóanyagban megtudhatjuk, hogyan hozhat létre egyedi JRE-t a használatával jlink, és azt is futtatjuk és teszteljük, hogy modulunk megfelelően működik-e a JRE-n belül.

2. Egyéni JRE-t kell létrehoznia

Értsük meg példával az egyedi futásidejű képek motivációját.

Létrehozunk egy egyszerű moduláris alkalmazást. Ha többet szeretne megtudni a moduláris alkalmazások létrehozásáról, olvassa el a modularitásról szóló cikkünket.

Először hozzunk létre egy Helló Világ osztály és a hozzá tartozó modul:

public class HelloWorld {private static final Logger LOG = Logger.getLogger (HelloWorld.class.getName ()); public static void main (String [] érvel) {LOG.info ("Hello World!"); }}
modul jlinkModule {java.logging szükséges; }

A program futtatásához csak szükségünk van Helló Világ,Húr, Logger, és Tárgy osztályok.

Annak ellenére, hogy ennek a programnak csak négy osztályra van szüksége a futtatáshoz, a JRE összes előre definiált osztálya is végrehajtásra kerül, még akkor is, ha a programunk nem igényli őket.

Ezért egy kis program futtatásához teljes JRE-t kell fenntartanunk, ami egyszerűen memóriapazarlás.

Tehát a testreszabott JRE a legjobb megoldás a példánk futtatására.

Val vel jlink, létrehozhatunk saját, kicsi JRE-t, amely csak a megfelelő osztályokat tartalmazza, amelyeket használni akarunk, memóriapazarlás nélkül, és ennek eredményeként megnő a teljesítmény.

3. Egyéni Java futásidejű képek készítése

Egyéni JRE-képek létrehozásához egyszerű lépések sorozatát hajtjuk végre.

3.1. Modul összeállítása

Először állítsuk össze a fent említett programot a parancssorból:

javac -d out module-info.java
javac -d out --module-path out com \ baeldung \ jlink \ HelloWorld.java

Most futtassuk a programot:

java --module-path out - modul jlinkModule / com.baeldung.jlink.HelloWorld

A kimenet a következő lesz:

2019. március 13. 10:15:40 com.baeldung.jlink.HelloWorld fő INFO: Hello World!

3.2. Használata jdeps a függő modulok felsorolásához

Használata érdekében jlink, ismernünk kell az alkalmazás által használt JDK modulok listáját, amelyeket fel kell vennünk az egyedi JRE-be.

Használjuk a jdeps parancs az alkalmazásban használt függő modulok megszerzéséhez:

jdeps --module-path out -s - modul jlinkModule

A kimenet a következő lesz:

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

Ennek van értelme, mint java.base a Java kód könyvtárakhoz szükséges minimális modul, és java.logging programunkban egy naplózó használja.

3.3. Egyéni JRE létrehozása a jlink

Egy egyedi JRE létrehozásához modulalapú alkalmazásokhoz használhatjuk a jlink parancs. Itt van az alapvető szintaxisa:

jlink [opciók] –modul-path modulepath –add-module modul [, module…] - output 

Nézzük hozzon létre egy egyedi JRE-t a programunkhoz Java 11 használatával:

jlink - modul-path "% JAVA_HOME% \ jmods"; out --add-modulok jlinkModule --output customjre

Itt az érték a –Add-modulok paraméter megmondja jlink mely modult kell felvenni a JRE-be.

Végül a customjre mellett -Kimenet A paraméter meghatározza a célkönyvtárat, ahol az egyéni JRE-t létre kell hozni.

Megjegyzés: A Windows shell használatával végrehajtjuk az összes parancsot ebben az oktatóanyagban. Lehet, hogy a Linux és Mac felhasználóknak kissé módosítaniuk kell őket.

3.4. Alkalmazás futtatása a létrehozott képpel

Most létrehozta egyedi JRE-jünket jlink.

A JRE teszteléséhez próbáljuk meg futtatni a modulunkat a kuka mappánk customjre könyvtárba, és futtassa az alábbi parancsot:

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

Ismét az általunk használt Windows héj az aktuális könyvtárban keresi az esetleges futtatható fájlokat, mielőtt továbblépne a PATH-ra. Külön figyelmet kell fordítanunk az egyedi JRE futtatására, nem pedig a Jáva PATH ellen oldódott meg, amikor Linux vagy Mac operációs rendszert használunk.

4. Egyéni JRE létrehozása indító szkriptekkel

Opcionálisan létrehozhatunk egy egyedi JRE-t is futtathatóval indító szkriptek.

Ehhez le kell futtatnunk a jlink parancs, amelynek van egy külön- –Indító paraméter az indítónk létrehozásához modulunkkal és fő osztályunkkal:

jlink --launcher customjrelauncher = jlinkModule / com.baeldung.jlink.HelloWorld - modul-elérési út "% JAVA_HOME% \ jmods"; out --add-modulok jlinkModule --output customjre

Ez két szkriptet generál: customjrelauncher.bat és customjrelauncher bennünk customjre / bin Könyvtár.

Futtassuk a szkriptet:

customjrelauncher.bat

És a kimenet a következő lesz:

2019. március 18. 12:34:21 com.baeldung.jlink.HelloWorld fő INFO: Hello World!

5. Következtetés

Ebben az oktatóanyagban megtanultuk, hogyan hozhatunk létre egyedi, moduláris JRE-t jlink amely csak a modulunkhoz szükséges minimális fájlokat tartalmazza. Megvizsgáltuk azt is, hogyan lehet létrehozni egy egyedi JRE-t indító szkriptekkel, amelyek könnyen végrehajthatók és szállíthatók.

Az egyedi, moduláris Java futásidejű képek nagy teljesítményűek. Az egyedi JRE-k létrehozásának céljai egyértelműek: takarékoskodnak a memóriával, javítják a teljesítményt, valamint fokozzák a biztonságot és a karbantarthatóságot. A könnyű, egyedi JRE-k segítségével skálázható alkalmazásokat is létrehozhatunk kis készülékekhez.

Az oktatóanyagban használt kódrészletek elérhetőek a Githubon keresztül.