Ú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.