Java 9 Platform Module System (JPMS) merupakan salah satu fitur baru dalam rilis Java 9 yang memperkenalkan konsep pemrograman java secara modular. Tutorial ini akan memberikan gambaran umum proses pemrograman java dengan menggunakan konsep modular dengan Java 9.
Module
Module diperkenalkan dalam JPMS sebagai metode dalam pengelompokan package yang menampung beragam class dan resource. JDK 9 sendiri telah membagi paket-paket API menjadi sejumlah modul yang dapat dilihat dengan menggunakan perintah
java --list-modules
Untuk membuat sebuah modul kita perlu menyediakan deskriptor untuk modul tersebut dalam bentuk kode java dengan nama module-info.java. Sebagai contoh kita membuat modul dengan nama latihan.modul
module latihan.modul { }
Semisal dalam modul tersebut kita membuat sebuah class java dengan nama ProgramUtama yang akan ditampung dalam package latihan.modul.satu, kita bisa tuliskan contoh kode program untuk ProgramUtama.java seperti berikut :
package latihan.modul.satu;
public class ProgramUtama {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
Untuk susunan direktori, compiler menentukan aturan bahwa source code untuk modul harus disimpan dalam folder yang memiliki nama yang sama dengan modul tersebut.
Sebagai contoh jika kita menampung semua source code dalam folder src maka susunan direktori dan source code adalah sebagai berikut :
src\
latihan.modul\
module-info.java
ProgramUtama.java
Dari sini kita bisa lanjutkan ke proses kompilasi dengan menggunakan perintah :
rmdir /S /Q build
md build
javac ^
-d build ^
--module-source-path src ^
src\latihan.modul\*.java
Perintah diatas mengerjakan proses kompilasi dan menempatkan hasilnya dalam folder build. Susunan direktori build setelah proses kompilasi adalah sebagai berikut :

Menggunakan Module
Penggunaan paket atau class yang disediakan dalam API umum terjadi dalam pemrograman java. Cara yang biasa dilakukan adalah dengan menyebutkan klausa import diikuti dengan nama paket atau class yang akan digunakan
import javax.swing.JFrame;
Berikut contoh kode program yang menggunakan API Swing
package latihan.modul.dua;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class ProgramUtama extends JFrame {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
(new ProgramUtama()).setVisible(true)
});
}
public ProgramUtama() {
setTitle("Hello World");
setSize(400, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
}
}
Pada rilis java sebelumnya, kode seperti diatas seharusnya dapat di-compile tanpa ada pesan kesalahan. Akan tetapi pada lingkungan java 9 kode diatas pada saat dikompilasi akan menghasilkan pesan kesalahan seperti berikut :
src\latihan.modul\latihan\modul\dua\ProgramUtama.java:3: error: package javax.swing is not visible
import javax.swing.JFrame;
^
(package javax.swing is declared in module java.desktop, but module latihan.modul does not read it)
1 error
Pada rilis java 9 ditetapkan aturan, jika modul yang kita buat membutuhkan modul lainnya, kita harus menyebutkan modul yang dibutuhkan tersebut dalam kode module-info.java menggunakan klausa requires.
Untuk kasus diatas, paket javax.swing ditampung dalam modul java.desktop, jadi disini kita perlu memodifikasi kode module-info.java menjadi seperti berikut :
module latihan.modul {
requires java.desktop;
}
Arsip JAR
Kita dapat membuat java archive atau file .jar dari modul diatas dengan menggunakan perintah :
md dist
jar -c -f dist\latihan.modul.jar ^
-e latihan.modul.dua.ProgramUtama ^
-C build\latihan.modul\ .
Perintah diatas akan membuat file latihan.modul.jar pada folder dist dengan Main-Class adalah latihan.modul.dua.ProgramUtama yang sudah kita kerjakan sebelumnya.
Custom JRE
Kelebihan lain dari java 9 adalah kita bisa membuat runtime (JRE) khusus yang hanya berisi modul program disertai modul-modul API yang dibutuhkan. Dengan cara ini kita bisa mendistribusikan program disertai dengan JRE secara bersamaan. Keuntungan lain dari cara seperti ini, kita akan mendapatkan runtime dengan ukuran berkas yang lebih kecil.
Untuk membuat custom JRE kita akan menggunakan perintah jlink.exe seperti berikut :
jlink.exe ^
--module-path "C:\Program Files\Java\jdk-10.0.1\jmods";dist ^
--add-modules latihan.modul,java.base,java.desktop ^
--output custom-jre ^
--launcher launch=latihan.modul/latihan.modul.dua.ProgramUtama ^
--verbose
Penjelasan :
- Pada opsi
--module-pathkita tentukan path dari modul yang akan dimasukkan kedalam JRE, disini kita gunakan dua buah path yaitu folderjmodsdari direktoriJAVA_HOMEdan folderdistyang berisi arsip.jardari modul yang sudah dibuat sebelumnya - Pada opsi
--add-moduleskita menambahkan modul-modul yang akan digunakan dalam JRE, dalam hal ini :latihan.modul,java.base, danjava.desktop - Opsi
--outputmenentukan direktori yang akan menampung JRE baru dalam hal ini adalah foldercustom-jre - Opsi
--launcherakan membuat skriplaunch.batyang akan mengeksekusi JRE dengan class javaProgramUtama - Opsi
--verboseakan menampilkan output dari proses