Panduan untuk jlink

1. Ikhtisar

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

Gambar runtime seperti itu bertindak persis seperti JRE tetapi hanya berisi modul yang kami pilih dan dependensi yang mereka perlukan agar berfungsi. Konsep gambar runtime modular diperkenalkan di JEP 220.

Dalam tutorial ini, kita akan belajar cara membuat JRE khusus menggunakan jlink , dan kita juga akan menjalankan dan menguji apakah modul kita berfungsi dengan benar di dalam JRE kita.

2. Perlu Membuat JRE Kustom

Mari kita pahami motivasi di balik gambar waktu proses kustom dengan sebuah contoh.

Kami akan membuat aplikasi modular sederhana. Untuk mengetahui lebih lanjut tentang membuat aplikasi modular, lihat artikel kami tentang modularitas.

Pertama, mari buat kelas HelloWorld dan modul yang sesuai:

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, kita hanya membutuhkan kelas HelloWorld, String , Logger , dan Object .

Meskipun program ini hanya membutuhkan empat kelas untuk dijalankan, semua kelas yang telah ditentukan di JRE juga dijalankan, bahkan jika program kami tidak memerlukannya.

Oleh karena itu, untuk menjalankan program kecil, kita harus memelihara JRE yang lengkap, yang hanya membuang-buang memori.

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

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

3. Membuat Gambar Runtime Java Kustom

Kami akan melakukan serangkaian langkah sederhana untuk membuat gambar JRE kustom.

3.1. Menyusun Modul

Pertama, mari kita kompilasi program yang disebutkan di atas dari baris perintah:

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

Sekarang, mari kita jalankan programnya:

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

Outputnya adalah:

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

3.2. Menggunakan jdeps untuk Membuat Daftar Modul yang Bergantung

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

Mari gunakan perintah jdeps untuk mendapatkan modul dependen yang digunakan dalam aplikasi:

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

Outputnya adalah:

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

Ini masuk akal, karena java.base adalah modul minimum yang diperlukan untuk pustaka kode Java, dan java.logging digunakan oleh logger di program kami.

3.3. Membuat JRE Kustom dengan jlink

Untuk membuat JRE kustom untuk aplikasi berbasis modul, kita dapat menggunakan perintah jlink . Berikut sintaks dasarnya:

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

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

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

Di sini, nilai setelah parameter –add -modules memberi tahu jlink modul mana yang akan disertakan dalam JRE.

Akhirnya, customjre sebelah -Output parameter mendefinisikan direktori target di mana JRE kebiasaan kami harus dihasilkan.

Catatan, kami menggunakan shell Windows untuk menjalankan semua perintah di sepanjang tutorial ini. Pengguna Linux dan Mac mungkin harus sedikit menyesuaikannya.

3.4. Menjalankan Aplikasi dengan Gambar yang Dihasilkan

Sekarang, kami memiliki JRE khusus yang dibuat oleh jlink .

Untuk menguji JRE kita, mari coba jalankan modul kita dengan menavigasi di dalam folder bin dari direktori customjre kita dan jalankan perintah di bawah ini:

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

Sekali lagi, shell Windows, yang kami gunakan, mencari di direktori saat ini untuk setiap eksekusi sebelum melanjutkan ke PATH. Kita perlu memberikan perhatian ekstra untuk benar-benar menjalankan JRE kustom kita, dan bukan java yang diselesaikan dengan PATH saat kita menggunakan Linux atau Mac.

4. Membuat JRE Kustom dengan Skrip Peluncur

Secara opsional, kami juga dapat membuat JRE khusus dengan skrip peluncur yang dapat dieksekusi .

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.

Gambar runtime Java modular dan kustom sangat berguna. Sasaran untuk membuat JRE kustom jelas: menghemat memori, meningkatkan kinerja, dan juga meningkatkan keamanan dan pemeliharaan. JRE kustom yang ringan juga memungkinkan kami membuat aplikasi yang dapat diskalakan untuk perangkat kecil.

Potongan kode yang digunakan dalam tutorial ini tersedia melalui Github.