Bagaimana cara menentukan JAVA_HOME di Debian / Ubuntu?

95

Di Ubuntu dimungkinkan untuk memiliki beberapa JVM secara bersamaan. Yang standar dipilih dengan update-alternatives. Tetapi ini tidak mengatur JAVA_HOMEvariabel lingkungan, karena kebijakan debian .

Saya menulis skrip peluncur (bash), yang memulai aplikasi java. Aplikasi java ini membutuhkan JAVA_HOMEvariabel lingkungan. Jadi bagaimana cara mendapatkan jalur JVM yang saat ini dipilih oleh update-alternatives?

Witek
sumber

Jawaban:

137

Untuk JRE, sesuatu seperti ini harus melakukan trik:

JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")
danadam
sumber
17
Saya membutuhkan rumah JDK dan bukan JRE, tetapi saya menggunakan ini: JAVA_HOME = $ (readlink -f / usr / bin / javac | sed "s: bin / javac ::") Terima kasih!
Witek
ketika saya mencoba perintah echo $(readlink -f /usr/bin/java | sed "s:bin/java::"), hasilnya /usr/lib/jvm/java-7-oracle/jre/dan tidak/usr/lib/jvm/java-7-oracle/
Sumit Ramteke
Kode yang diberikan dalam rsaddey berfungsi dengan benar
Sumit Ramteke
43

solusi danadam dapat dengan mudah diadopsi untuk mengambil jalur JDK (yaitu bukan JRE) seperti yang dibutuhkan:

JAVA_HOME=$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")
  • Mencari kompiler Java javac (bukan java) termasuk dalam JDK (tetapi tidak JRE).
  • Tidak memiliki trailing / (dihapus oleh sed s: / bin ... bukannya s: bin ...)
rsaddey
sumber
12

export JAVA_HOME=$(dirname $(dirname $(readlink -f /usr/bin/java)))

Masuk .bashrcberguna bagi saya.

David
sumber
9

Jadi, Anda mengatakan bahwa perintah ini tidak membantu Anda?

sudo update-alternatives --config java 
Djangofan
sumber
2
Apakah itu seharusnya mengatur JAVA_HOME Anda? Saya telah menemukan bahwa pembaruan-java-alternatif adalah cara yang lebih baik untuk memperbarui Java karena pembaruan-alternatif tidak memperbarui semua alternatif terkait Java. Lihat askubuntu.com/questions/141791
James McMahon
Benar, tetapi saya telah menemukan contoh Linux yang memiliki pembaruan-alternatif tetapi tidak menginstal pembaruan-java-alternatif.
djangofan
3

Saya menginstal java dengan

sudo apt-get install openjdk-7-jre-headless

dan kemudian untuk menemukan lokasi

ls -al /etc/alternatives/java
prule
sumber
2

Sebagai perpanjangan dari jawaban danadams:

Pertama-tama, instal Java JRE ke-2 sebagai opsi java ke-3, dengan prioritas "3":

sudo alternatives --install /usr/lib/jvm/jre jre /opt/IBM/java/jre/bin/java 3

Kemudian, Anda dapat mencantumkannya:

update-alternatives --list java

Anda dapat mengatur alternatif dengan tangan, menggunakan ini:

sudo alternatives --config java /opt/IBM/java/jre/bin/java

Kemudian, skrip Anda dapat mengaturnya dengan cepat, seperti:

sudo alternatives --set java /opt/IBM/java/jre/bin/java
JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")

Ini lebih baik menggambarkan apa yang dilakukan perintah 'sed'. Meskipun Anda masih perlu mengatur tautan untuk javaw dan javac, dll, juga, masing-masing dilakukan secara terpisah.

Djangofan
sumber
1

Beberapa waktu yang lalu saya membuat tutorial di forum Ubuntu tentang cara menginstal JRE / JDK terbaru dari situs web Java. Ini juga mencakup cara mengaktifkannya di seluruh sistem, dengan menambahkan lokasi JRE / JDK ke variabel PATH. Jika suka, Anda juga dapat menambahkan JAVA_HOME ke skrip, yang disebutkan di akhir topik.

Lihatlah: http://ubuntuforums.org/showthread.php?t=1437100

EarthMind
sumber
1

Jika java dikonfigurasikan dengan update-alternativesatau ditambahkan ke variabel PATH Anda secara manual, maka hardcod "/usr/bin/java"tidak diperlukan. Saya menggunakan solusi ini di .bashrc saya:

export JAVA_HOME=$(readlink -m $(which java)/../..)

Freddy
sumber