Instalasi JDK berhasil, tetapi ada satu hambatan kecil yang hampir selalu menyapa pemula: buka terminal di folder mana pun, ketik java, dan pesan command not found muncul. Hambatan tersebut bukan berasal dari Java, melainkan dari cara sistem operasi mencari program. Solusinya adalah dua environment variable — PATH dan JAVA_HOME — yang menghubungkan terminal kita dengan direktori bin/ milik JDK. Pada Chapter ini kita akan memahami mekanisme keduanya, mengaturnya di Linux, macOS, dan Windows, lalu membuktikan dari dalam program Java bahwa pengaturan tersebut benar-benar terbaca.
Apa itu Environment Variable #
Environment variable adalah pasangan nama–nilai yang disimpan sistem operasi dan diwariskan ke setiap program yang dijalankan. Ketika shell mengeksekusi java, proses java tersebut lahir dengan membawa salinan seluruh environment variable milik shell. Mekanisme pewarisan inilah yang membuat pengaturan di berkas konfigurasi shell berlaku untuk semua perintah Java yang kita jalankan setelahnya.
Dua nama yang paling penting bagi pengembang Java:
PATH: daftar direktori yang diperiksa shell saat kita mengetik nama sebuah perintah.JAVA_HOME: alamat direktori utama JDK, dibaca oleh alat-alat eksternal seperti Maven, Gradle, dan IDE.
PATH — Cara Shell Menemukan Perintah #
Saat kita mengetik javac Halo.java, shell tidak mencari javac di seluruh hard disk. Shell membaca nilai PATH — deretan direktori yang dipisah titik dua (Linux/macOS) atau titik koma (Windows) — lalu memeriksa direktori-direktori itu satu per satu secara berurutan sampai menemukan berkas yang dapat dieksekusi bernama javac. Bila tidak ditemukan, barulah muncul pesan command not found atau 'javac' is not recognized.
Konsekuensinya sederhana: agar perintah java dan javac dapat dipanggil dari direktori mana pun, direktori <lokasi-jdk>/bin harus masuk ke dalam PATH.
JAVA_HOME — Alamat JDK untuk Alat Eksternal #
JAVA_HOME berisi alamat direktori utama JDK (satu tingkat di atas bin/). Yang membaca variabel ini bukan JVM itu sendiri — biner java tahu rumahnya sendiri dari lokasi berkasnya — melainkan perangkat di sekitarnya: build tool Maven dan Gradle mencari compiler lewat JAVA_HOME, server aplikasi seperti Tomcat memakainya untuk memilih JDK, dan IDE menggunakannya sebagai kandidat JDK bawaan.
Pengaturan di Linux dan macOS #
Di Linux dan macOS, environment variable diatur di berkas konfigurasi shell — ~/.bashrc atau ~/.profile untuk Bash, ~/.zshrc untuk Zsh (shell bawaan macOS modern). Tambahkan dua baris berikut, sesuaikan jalurnya dengan lokasi JDK Anda:
export JAVA_HOME=/usr/lib/jvm/temurin-25-jdk-amd64
export PATH="$JAVA_HOME/bin:$PATH"Baris pertama mengisi JAVA_HOME dengan alamat JDK; baris kedua menempatkan bin/ milik JDK di urutan awal PATH tanpa menghapus isi lama. Di macOS, helper /usr/libexec/java_home dapat mengisi JAVA_HOME secara otomatis:
export JAVA_HOME=$(/usr/libexec/java_home)
export PATH="$JAVA_HOME/bin:$PATH"Setelah menyimpan berkas konfigurasi, jalankan source ~/.bashrc (atau buka terminal baru) agar perubahan aktif.
Pengaturan di Windows #
Di Windows, cara paling aman adalah melalui dialog Environment Variables: buka Start, ketik “environment”, pilih Edit the system environment variables, klik Environment Variables, lalu tambahkan atau sunting entri berikut:
JAVA_HOME = C:\Program Files\Java\jdk-25
PATH = %JAVA_HOME%\bin;%PATH%Variabel JAVA_HOME dapat pula diisi dari PowerShell dengan setx JAVA_HOME "C:\Program Files\Java\jdk-25" — perintah tersebut menyimpan nilai secara permanen untuk sesi berikutnya.
Verifikasi dan Uji dari Dalam Program #
Buka terminal baru, lalu periksa kedua variabel dan lokasi biner java:
echo $JAVA_HOME # Linux/macOS; di Windows cmd: echo %JAVA_HOME%
which java # Linux/macOS; di Windows cmd: where java
java -version
javac -versionBila echo menampilkan alamat JDK dan which java menunjuk ke <lokasi-jdk>/bin/java, konfigurasi kita berhasil. Sebagai pembuktian terakhir, program Java juga dapat membaca environment variable proses pembangunnya melalui method System.getenv:
public class CekLingkungan {
public static void main(String[] args) {
String javaHome = System.getenv("JAVA_HOME");
System.out.println("JAVA_HOME terisi : " + (javaHome != null));
System.out.println("Versi JVM aktif : " + System.getProperty("java.vm.version"));
}
}Output yang Dihasilkan:
JAVA_HOME terisi : true
Versi JVM aktif : 25.0.4.1+1-LTSMari kita telaah baris-baris kode di atas:
- Baris 3 (
String javaHome = ...): memanggilSystem.getenv("JAVA_HOME"). Method ini membaca environment variable yang diwarisi dari proses pembangun — dalam hal ini terminal tempat perintahjavadiketik. Bila variabel tidak diatur, hasilnyanull, bukan string kosong. - Baris 5 (
javaHome != null): membandingkan dengannulluntuk menguji keberadaan variabel, bukan isinya. Nilai isinya sengaja tidak dicetak karena berbeda-beda di tiap komputer; silakan tambahkanSystem.out.println(javaHome)untuk melihat jalur di mesin Anda. - Baris 6 (
System.getProperty(...)): berbeda dengangetenv, methodgetPropertymembaca system property milik JVM — dalam hal ini versi JVM yang benar-benar mengeksekusi program.
Kombinasi getenv dan getProperty pada program di atas sekaligus membuktikan dua hal: environment variable mengalir dari terminal ke program, dan JVM yang berjalan cocok dengan JDK yang kita atur. Dengan lingkungan yang kini rapi, saatnya mempercepat eksperimen — Chapter berikutnya memperkenalkan jshell, konsol interaktif untuk mencoba potongan kode Java tanpa ritual kompilasi.
Referensi #
Berkas Sumber
Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.
CekLingkungan.java
Unduh berkaspublic class CekLingkungan {
public static void main(String[] args) {
String javaHome = System.getenv("JAVA_HOME");
System.out.println("JAVA_HOME terisi : " + (javaHome != null));
System.out.println("Versi JVM aktif : " + System.getProperty("java.vm.version"));
}
}