apa alasan keberadaan variabel lingkungan JAVA_HOME?

94

Banyak aplikasi berbasis java perlu menyetel variabel JAVA_HOME env. Apa tujuan variabel ini?

pengguna496949
sumber
5
Anda dapat membaca di sini
Sergey Vedernikov
2
Saya menemukan pertanyaan itu belum ada jawaban. Untuk menjalankan java itu sendiri, tidak perlu memiliki variabel ini jika Anda memiliki folder dengan biner di jalurnya. Semua jawaban menunjukkan yang jelas: "Di mana java telah diinstal". Tapi Mengapa: Apa Arti Menjalankan Aplikasi Java?
Serigala
7
terlepas dari semua komentar dan jawaban ini, saya tidak melihat alasan sebenarnya untuk menyetel variabel lingkungan ini. Tidak ada alasan. Saya datang ke sini dari mencoba mengatur ini dengan wsdl2java. Jika saya tidak menggunakan alat ini, tidak perlu variabel env .... sepertinya hanya beberapa alat yang menggunakan var ini. tapi kenapa?
Thufir
@ Thufir - Saya belum melihat alasan yang dinyatakan secara eksplisit di mana pun. - JAVA_HOME hanyalah konvensi. Itu tidak memiliki arti khusus selain semua orang setuju untuk menggunakannya AFAIK - Satu-satunya kegunaan yang saya lihat adalah memberikan alat kemampuan untuk membedakan antara JRE yang biasanya diatur dalam variabel PATH dan JDK. Biasanya JAVE_HOME diatur ke JDK. - Ini eksplisit. Tidak ada berurusan dengan urutan direktori seperti yang Anda miliki dengan PATH di mana mungkin ada banyak tempat untuk menemukan java exe.
Rohan

Jawaban:

22

Variabel lingkungan adalah string yang berisi informasi seperti drive, jalur, atau nama file.

The variabel lingkungan JAVA_HOME poin ke direktori dimana lingkungan runtime Java (JRE) diinstal pada komputer Anda.

kamaci
sumber
40
Satu koreksi: JAVA_HOME harus mengarah ke JDK, bukan JRE. Banyak aplikasi tidak peduli dengan perbedaannya tetapi itu signifikan untuk beberapa.
Chris Nava
4
Ada juga folder JRE yang tersedia di JDK. Oleh karena itu, dengan bantuan JAVA_HOME, aplikasi dapat menemukan JDK serta JRE.
anak nakal
@ChrisNava: Tampaknya menunjuk JAVA_HOME ke instalasi JRE berlaku dalam beberapa kasus (saya kira sebagian besar kasus non-pengembangan): stackoverflow.com/questions/17601827/… . Jadi mengatakan "harus" berarti terlalu banyak.
cic
18

Tujuannya adalah untuk menunjukkan tempat Java diinstal. $JAVA_HOME/bin/javaharus menjalankan runtime Java.

Haakon
sumber
4
Tapi itu bodoh, karena java harus berada di jalur tersebut, dan biner dapat menemukan dirinya sendiri dan membuka file lain menggunakan jalur relatif.
LtWorf
3
Ini berguna saat java tidak ada di $ PATH, misalnya saat Anda memiliki beberapa penginstalan SDK.
Haakon
Argumen pertama ke biner adalah nama lengkap dari executable itu sendiri, java tidak perlu berada di jalur untuk menemukan direktorinya sendiri.
LtWorf
@Haakon Sebagai seseorang yang mencoba mengatur beberapa JDK, mengapa Anda tidak ingin java di jalurnya? Bagaimana Windows menemukan java dari java_home? Saya pikir jalurnya kurang lebih didefinisikan sebagai "daftar tempat OS akan mencari executable".
LastStar007
7

Saat Anda menjalankan program Java, Anda harus memulai JVM terlebih dahulu, biasanya ini dilakukan dengan menjalankan file yang dapat dieksekusi, pada Windows ini adalah java.exe . Anda bisa mendapatkannya dengan banyak cara misalnya hanya memberikan jalur lengkap:

C:\somedir\bin\java.exe

atau mungkin memilikinya di PATH Anda.

Anda menentukan sebagai argumen baris perintah beberapa file kelas atau file Jar yang berisi file kelas yang merupakan program Anda. Namun itu belum cukup, java.exe sendiri membutuhkan berbagai resource lain, tidak terkecuali semua library Java. Dengan menyetel variabel lingkungan JAVA_HOME Anda menentukan di mana JRE, dan karenanya, semua sumber daya runtime tersebut, akan ditemukan. Anda harus memastikan bahwa Java tertentu yang Anda jalankan cocok dengan pengaturan JAVA_HOME.

Anda mungkin juga perlu meletakkan JAVA_HOME\binawal jalur Anda sehingga jika java.exememunculkan salinan dirinya sendiri (misalnya untuk mengkompilasi JSP) itu mengambil versi yang benar.

djna
sumber
6

Menurut @dirai di sini JAVA_HOMEtidak digunakan oleh Java itu sendiri tetapi oleh beberapa alat pihak ketiga seperti misalnya Apache Tomcat. Namun sebagian besar aplikasi akan bekerja tanpa variabel ini disetel tetapi beberapa dapat menunjukkan perilaku yang tidak terduga.

karlsebal.dll
sumber
5

JAVA_HOMEadalah variabel lingkungan .

Ini harus diatur pada sistem operasi yang berbeda. Lihat tautan berikut.

Lihat juga di sini untuk informasi lebih lanjut.

sgokhales.dll
sumber
1
Anda conflating environmentdengan path, yang hal yang berbeda tetapi digunakan pada Windows dengan cara yang persis sama seperti di Linux.
Val
1
@val baru saja menunjukkan, yang sejak itu telah diperbaiki dalam jawabannya.
barlop
Hanya untuk menambah daftar JAVA_HOME di Windows 10
filip_j
3

JAVA_HOMEmemungkinkan Anda untuk menjalankan salah satu dari beberapa instalasi java. Bahkan jika Anda memiliki /usr/lib/jvm/java-1.8.0/bin/java dalam PATH Anda terlebih dahulu, itu berguna untuk dapat mengatakan JAVA_HOME=/usr/lib/jvm/java-1.5.0dan memiliki default "java" yang Anda gunakan untuk menjalankan program menggunakan yang lain, sebagai gantinya, sebagai masalah pengaturan lingkungan. Hal ini memungkinkan programmer untuk menggunakan java yang mereka butuhkan, bahkan jika itu tidak diinstal di lokasi sistem normal, dan menguji atau menyediakan kompatibilitas terbalik dengan versi alternatif tersebut. Dan itu tidak rentan untuk direset di PATH oleh program lain yang diinstal, seperti pembaruan versi utama untuk java itu sendiri.

Nico Kadel-Garcia
sumber