Panduan untuk jlink

1. Gambaran keseluruhan

jlink adalah alat yang menghasilkan gambar runtime Java khusus yang hanya memuat modul platform yang diperlukan untuk aplikasi tertentu.

Gambar runtime seperti itu bertindak sama seperti JRE tetapi hanya mengandungi modul yang kami pilih dan pergantungan yang mereka perlukan untuk berfungsi. Konsep gambar runtime modular diperkenalkan pada JEP 220.

Dalam tutorial ini, kita akan belajar bagaimana membuat JRE khusus menggunakan jlink , dan kita juga akan menjalankan dan menguji bahawa modul kita berfungsi dengan betul di dalam JRE kita.

2. Perlu Membuat JRE Custom

Mari fahami motivasi di sebalik gambar runtime tersuai dengan contoh.

Kami akan membuat aplikasi modular yang mudah. Untuk mengetahui lebih lanjut mengenai membuat aplikasi modular, rujuk artikel kami mengenai modulariti.

Pertama, mari buat kelas HelloWorld dan modul yang sepadan:

public class HelloWorld { private static final Logger LOG = Logger.getLogger(HelloWorld.class.getName()); public static void main(String[] args) { LOG.info("Hello World!"); } }
module jlinkModule { requires java.logging; }

Untuk menjalankan program ini, kami hanya memerlukan kelas HelloWorld, String , Logger , dan Object .

Walaupun program ini hanya memerlukan empat kelas untuk dijalankan, semua kelas yang telah ditetapkan di JRE juga dapat dilaksanakan, walaupun program kami tidak memerlukannya.

Oleh itu, untuk menjalankan program kecil, kita harus mengekalkan JRE yang lengkap, yang hanya membuang ingatan.

Jadi, JRE yang disesuaikan adalah pilihan terbaik untuk menjalankan contoh kita.

Dengan jlink , kita dapat membuat JRE kecil sendiri yang hanya mengandungi kelas yang relevan yang ingin kita gunakan, tanpa membuang memori, dan sebagai hasilnya, kita akan melihat peningkatan prestasi.

3. Membina Imej Runtime Java Custom

Kami akan melakukan serangkaian langkah mudah untuk membuat gambar JRE tersuai.

3.1. Menyusun Modul

Pertama, mari menyusun program yang disebutkan di atas dari baris arahan:

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

Sekarang, mari jalankan program:

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

Hasilnya adalah:

Mar 13, 2019 10:15:40 AM com.baeldung.jlink.HelloWorld main INFO: Hello World!

3.2. Menggunakan jdeps untuk Menyenaraikan Modul Bergantung

Untuk menggunakan jlink , kita perlu mengetahui senarai modul JDK yang digunakan aplikasi dan yang harus kita sertakan dalam JRE khusus kita.

Mari gunakan arahan jdeps untuk mendapatkan modul bergantung yang digunakan dalam aplikasi:

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

Hasilnya adalah:

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

Ini masuk akal, kerana java.base adalah modul minimum yang diperlukan untuk perpustakaan kod Java, dan java.logging digunakan oleh penebang dalam program kami.

3.3. Membuat JRE Custom dengan jlink

Untuk membuat JRE khusus untuk aplikasi berbasis modul, kita dapat menggunakan perintah jlink . Inilah sintaks asasnya:

jlink [options] –module-path modulepath –add-modules module [, module…] --output 

Sekarang, mari buat JRE khusus untuk program kami menggunakan Java 11:

jlink --module-path "%JAVA_HOME%\jmods";out --add-modules jlinkModule --output customjre

Di sini, nilai selepas parameter –add -modules memberitahu jlink modul mana yang akan disertakan dalam JRE.

Akhirnya, customjre di sebelah parameter -output mendefinisikan direktori sasaran di mana JRE khusus kami harus dihasilkan.

Perhatikan, kami menggunakan cengkerang Windows untuk melaksanakan semua perintah sepanjang tutorial ini. Pengguna Linux dan Mac mungkin perlu menyesuaikannya sedikit.

3.4. Menjalankan Aplikasi dengan Gambar yang Dihasilkan

Sekarang, kami mempunyai JRE khusus kami yang dibuat oleh jlink .

Untuk menguji JRE kami, mari cuba jalankan modul kami dengan menavigasi di dalam tong sampah direktori customjre kami dan jalankan perintah di bawah:

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

Sekali lagi, shell Windows, yang kami gunakan, mencari di direktori semasa untuk mana-mana yang dapat dilaksanakan sebelum meneruskan ke PATH. Kita perlu memberi perhatian tambahan untuk benar-benar menjalankan JRE khusus kita, dan bukan java yang diselesaikan terhadap PATH ketika kita menggunakan Linux atau Mac.

4. Membuat JRE Custom dengan Skrip Pelancar

Sebagai pilihan, kami juga dapat membuat JRE khusus dengan skrip pelancar yang dapat dilaksanakan .

For this, we need to run the jlink command that has an extra –launcher parameter to create our launcher with our module and main class:

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

This will generate two scripts: customjrelauncher.bat and customjrelauncher inside our customjre/bin directory.

Let's run the script:

customjrelauncher.bat

And the output will be:

Mar 18, 2019 12:34:21 AM com.baeldung.jlink.HelloWorld main INFO: Hello World!

5. Conclusion

In this tutorial, we have learned how we can create a custom, modular JRE with jlink that only contains the bare minimum files needed for our module. We also looked into how to create a custom JRE with launcher scripts that can be easily executed and shipped.

Imej runtime Java khusus dan modular sangat hebat. Matlamat untuk membuat JRE khusus jelas: ia menjimatkan memori, meningkatkan prestasi, dan juga meningkatkan keselamatan dan pemeliharaan. JRE khusus ringan juga membolehkan kami membuat aplikasi yang berskala untuk peranti kecil.

Coretan kod yang digunakan dalam tutorial ini terdapat di Github.