Cara mengatur JAVA_HOME di Linux untuk semua pengguna

185

Saya baru mengenal sistem Linux dan sepertinya ada terlalu banyak folder Java.

java -versi memberi saya:

  • versi java "1.7.0_55"
  • OpenJDK Runtime Environment (rhel-2.4.7.1.el6_5-x86_64 u55-b13)
  • OpenJDK 64-Bit Server VM (build 24.51-b03, mode campuran)

Ketika saya mencoba membangun proyek Maven, saya mendapatkan kesalahan:

Error: JAVA_HOME is not defined correctly.
We cannot execute /usr/java/jdk1.7.0_05/bin/java

Bisakah Anda memberi tahu saya file mana yang perlu saya modifikasi untuk root dan juga bukan root dan di mana tepatnya java berada?

Bosco
sumber

Jawaban:

353
  1. find /usr/lib/jvm/java-1.x.x-openjdk
  2. vim /etc/profile

    Tambahkan sudo jika masuk sebagai pengguna yang tidak memiliki hak istimewa, yaitu. sudo vim

  3. Tekan 'i' untuk masuk dalam mode sisipkan
  4. Menambahkan:

    export JAVA_HOME="path that you found"
    
    export PATH=$JAVA_HOME/bin:$PATH
  5. logout dan login lagi, reboot, atau gunakan source /etc/profileuntuk segera menerapkan perubahan di shell Anda saat ini
Dave Guy itu
sumber
29
jangan lupa untuk menghapus tanda kutip ganda dan membuatnya kembali dari keyboard Anda, karena hanya menyalin dan menempel dapat membuat masalah.
Sunil Kumar
12
@rbaleksandar tergantung pada beberapa aplikasi JAVA_HOME, tidak ada salahnya mengaturnya juga.
raffian
2
IntelliJ adalah aplikasi semacam itu - dan bukan aplikasi minor.
Pete
12
Anda perlu menjalankan source /etc/profileagar perubahan segera berlaku juga!
Mohamed Taher Alrefaie
1
Ini mengarahkan saya ke arah yang benar. Sebenarnya ada basi /etc/profile.d/jdk.shmengambang di sistem saya.
Hermann
109

Untuk semua pengguna, saya akan merekomendasikan menempatkan baris berikut di /etc/profile

export JAVA_HOME=$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")

Ini akan memperbarui secara dinamis dan bekerja dengan baik dengan sistem alternatif . Namun perlu dicatat bahwa pembaruan hanya akan terjadi di shell login baru.

Eero Aaltonen
sumber
10
untuk mematuhi penggunaan JRE (bahkan tanpa kepala) yang biasa export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:/bin/java::")saja - perhatikan bahwa saya menggunakan adil java, bukanjavac
Roman Kruglov
@occulta Setidaknya Maven mengharapkan JAVA_HOME untuk menunjuk ke JDK dan menggunakannya untuk mencari kompilator java.
Eero Aaltonen
1
Mengunggah readlinkdan memperbarui / memutakhirkan solusi yang kompatibel, bahkan ini adalah utas yang sudah berumur 5 tahun. Saya hanya merekomendasikan untuk tidak mengedit / etc / profile, tetapi menempatkan ekspor Anda di dalam file khusus, misalnya /etc/profile.d/java_environment.sh, mungkin Anda harus chmod +x java_environment.shdan reboot.
ChristophS
Sempurna. Lebih baik daripada dirnamesolusi kikuk saya . Jika Anda seperti saya dan ingin memahami apa yang terjadi di sini, ini adalah penggantian sederhana teks yang cocok dari input dengan string kosong. Karakter "default" untuk penggantian adalah /, tetapi selama Anda konsisten, Anda dapat mengganti /dengan apa saja. Dalam hal ini adalah titik dua yang kami gunakan /untuk pemisah jalur.
Ungeheuer
35

Anda dapat menggunakan / etc / profile atau file yang lebih baik seperti /etc/profile.d/jdk_home.sh

export JAVA_HOME=/usr/java/jdk1.7.0_05/

Anda harus ingat bahwa file ini hanya dimuat dengan shell login baru .. Jadi setelah bash -l atau sesi gnome baru dan tidak berubah dengan versi Java yang baru.

flob
sumber
1
setidaknya di linux saya (raspbian), / etc / profile akan sumber /etc/profile.d/*.shsehingga file Anda perlu dipanggil jdk_home.shagar dapat bersumber
Hilikus
Terima kasih @Hilikus :-) Saya mengubahnya sesuai.
flob
2
Terima kasih. saya melakukan campuran jawaban Anda dan @ Eero untuk yang terbaik dari kedua dunia;)
Hilikus
1
Ini adalah jawaban terbaik
Yakub
/etc/profile.d/jdk_home.shadalah jawaban yang jauh lebih bersih, setidaknya untuk Ubuntu , /etc/profilesudah dipenuhi dengan banyak logika. Tampaknya tidak bijaksana untuk menambahkan lebih banyak ke dalamnya ...
Ng Sek Long
30

Tidak ada jawaban lain yang "menempel" bagi saya di RHEL 7, bahkan pengaturan JAVA_HOMEdan PATHlangsung /etc/profileatau ~/.bash_profiletidak akan berhasil. Setiap kali saya mencoba memeriksa apakah JAVA_HOMEsudah diatur, akan muncul kosong:

$ echo $JAVA_HOME
    (<-- no output)

Yang harus saya lakukan adalah membuat skrip di /etc/profile.d/jdk_home.sh:

#!/bin/sh
export JAVA_HOME=/opt/ibm/java-x86_64-60/
export PATH=$JAVA_HOME/bin:$PATH

Saya awalnya mengabaikan baris pertama (itu #!/bin/sh), dan itu tidak akan berhasil tanpanya.

Sekarang sudah berfungsi:

$ echo $JAVA_HOME
/opt/ibm/java-x86_64-60/
Kyle Falconer
sumber
Saya memiliki pengalaman yang sama di RHEL 7. Saya menghapus ekspor dari ~ / .bash_profile dan menggunakan pendekatan ini.
xpagesbeast
#! / bin / sh tidak diperlukan di jdk_home.sh Anda. setelah Anda selesai melakukan konfigurasi, pastikan untuk keluar dan masuk lagi
kuhajeyan
12

Sangat mudah untuk mengatur jalur di Linux. Lakukan sebagai berikut:

Langkah-1 Buka terminal dan ketik sudo gedit .bashrc

Langkah-2 Ini akan menanyakan kata sandi Anda. Setelah mengetik kata sandi, itu akan membuka file bash. Lalu pergi ke ujung dan ketik di bawah ini

langkah-3

   export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64/"
   export PATH=$PATH:$JAVA_HOME/bin

langkah-4 Kemudian simpan file dan keluar dari file

Di atas adalah untuk satu pengguna. Untuk semua pengguna, Anda harus mengikuti langkah-langkah di bawah ini

Langkah 1 gedit /etc/profile

Langkah 2 export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64/"

Langkah-3 export PATH=$PATH:$JAVA_HOME/bin

Semoga ini membantu. Terima kasih!

PyDevSRS
sumber
2
jawaban ini hanya untuk pengguna saat ini.
Manuel Manhart
Terima kasih @ickyrr
PyDevSRS
7

Melakukan apa yang dilakukan Oracle (sebagai mantan Karyawan Sun, saya tidak terbiasa dengan hal itu)

ln -s latestJavaRelease / usr / java / default
Di mana latestJavaRelease adalah versi yang ingin Anda gunakan

lalu ekspor JAVA_HOME = / usr / java / default

Steve S
sumber
6

Jawaban yang diberikan posting sebelumnya valid. Tetapi tidak ada satu jawaban pun yang lengkap sehubungan dengan:

  1. Mengubah / etc / profile tidak direkomendasikan hanya karena alasannya (sebagaimana dinyatakan dalam / etc / profile):
  • Ini BUKAN ide yang baik untuk mengubah file ini kecuali Anda tahu apa yang Anda lakukan. Jauh lebih baik untuk membuat skrip shell custom.sh di /etc/profile.d/ untuk membuat perubahan khusus pada lingkungan Anda, karena ini akan mencegah perlunya penggabungan dalam pembaruan di masa mendatang. *
  1. Jadi seperti yang dinyatakan di atas buat file /etc/profile.d/custom.sh untuk perubahan khusus.

  2. Sekarang, untuk selalu terus diperbarui dengan versi Java yang lebih baru sedang diinstal, jangan pernah meletakkan path absolut, alih-alih gunakan:

#Jika menjadikan jdk sebagai rumah java

export JAVA_HOME = $ (readlink -f / usr / bin / javac | sed "s: / bin / javac ::")

ATAU

#Jika menjadikan jre sebagai rumah java

export JAVA_HOME = $ (readlink -f / usr / bin / java | sed "s: / bin / java ::")

  1. Dan ingatlah untuk memiliki #! / bin / bash pada file custom.sh
alok ailawadi
sumber
4

Salin path file bin yang Anda instal

YOUR PATH

buka terminal dan edit file lingkungan dengan mengetik perintah berikut,

sudo nano /etc/environment

Dalam file ini, tambahkan baris berikut (menggantikan YOUR_PATHdengan jalur yang baru saja disalin):

JAVA_HOME="YOUR_PATH"

Itu harus cukup untuk mengatur variabel lingkungan. Sekarang muat ulang file ini:

source /etc/environment

sekarang mengujinya dengan mengeksekusi:

echo $JAVA_HOME
VirangaMahesh
sumber
3
olny efek sesi terminal saat ini
Fatih Türker
@ FatihTürker Reboot PC Anda
Jack Giffin
Bagi saya menggunakan jdk11, YOUR_PATH adalah/usr/lib/jvm/default-java/
Jack Giffin
2

Di Linux saya menambahkan baris ini ke profil ~ /.:

export JAVA_HOME=$(readlink -ze /usr/bin/javac | xargs -0 dirname -z | xargs -0 dirname)
Emanuel Oliveira
sumber
2
Tampaknya jawaban yang berpotensi benar tetapi dapatkah Anda menjelaskan mengapa itu berfungsi, yaitu apa yang dilakukannya dan apa masalah OP? Juga, Anda mengatakan "pada Linux", tetapi ada banyak distro Linux yang berbeda dan mungkin tidak bekerja untuk semuanya, tambahkan distro mana yang berfungsi.
Buurman
2

Langkah 1 - periksa versi java saat ini dengan "echo $ JAVA_HOME"

Langkah 2 - vim / etc / profile

Langkah 3 - Di akhir file Anda akan menemukan ekspor JAVA_HOME, kami perlu menyediakan jalur baru di sini, pastikan itu tidak relatif.

Langkah 4 - Simpan dan keluar: wq

Langkah 5 - "sumber / etc / profile /", ini akan menjalankan perubahan

Langkah 6 - Sekali lagi lakukan gema $ JAVA_HOME - perubahan akan tercermin.

swapnil shashank
sumber
2

1 ... Menggunakan jalan pintas Ctlr+ Alt+T untuk membuka terminal

2 ... Jalankan perintah di bawah ini:

echo export JAVA_HOME='$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")' | sudo tee /etc/profile.d/jdk_home.sh > /dev/null

3 ... (Disarankan) Mulai ulang VM / komputer Anda. Kamu bisa memakaisource /etc/source jika tidak ingin me-restart komputer

4 ... Menggunakan jalan pintas Ctlr+ Alt+T untuk membuka terminal

5 ... Angsuran JAVA_HOME yang terverifikasi dengan

echo $JAVA_HOME

Salinan satu-liner dari flob , kreditkan kepada mereka

Ng Sek Long
sumber
2
export "JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")" | tee -a /etc/profile && source /etc/profile && echo $JAVA_HOME
Dashrath Mundkar
sumber
1

Mungkin ide yang bagus untuk mencari profil apa pun yang Anda edit untuk menyimpan harus menggunakan login baru.

baik: sumber / etc / atau. / etc /

Di mana profil apa pun yang Anda edit.

Bryant Bernstein
sumber
1

Sementara kita mengatur JAVA_HOME, izinkan saya berbagi beberapa manfaat pengaturan JAVA_HOME atau variabel lingkungan lainnya:

1) Mudah untuk memutakhirkan JDK tanpa memengaruhi startup aplikasi dan file konfigurasi yang mengarah ke JAVA_HOME. Anda hanya perlu mengunduh versi baru dan pastikan JAVA_HOME Anda menunjuk ke versi Java yang baru. Ini adalah manfaat terbaik menggunakan variabel lingkungan atau tautan.

2) variabel JAVA_HOME pendek dan ringkas, bukan path lengkap ke direktori instalasi JDK.

3) Variabel JAVA_HOME adalah independensi platform yaitu jika skrip startup Anda menggunakan JAVA_HOME maka itu dapat berjalan pada Windows dan UNIX tanpa modifikasi apa pun, Anda hanya perlu mengatur JAVA_HOME pada sistem operasi masing-masing.

Baca selengkapnya: http://javarevisited.blogspot.com/2012/02/how-to-set-javahome-environment-in.html#ixzz4BWmaYIjH

tamu
sumber
1

Ini adalah skrip yang sangat sederhana untuk menyelesaikan masalah

export JAVA_HOME_BIN=`which java`
export JAVA_HOME_DIR=`dirname $JAVA_HOME_BIN`
export JAVA_HOME=`dirname $JAVA_HOME_DIR`

Dan untuk pengujian:

echo $JAVA_HOME
Dylan Breugne
sumber
1

Posting sebagai jawaban, karena saya tidak memiliki hak istimewa untuk berkomentar.

Tunjuk ke catatan : ikuti jawaban yang diterima yang diposting oleh "That Dave Guy".

Setelah mengatur variabel, pastikan Anda mengatur izin yang sesuai ke direktori java di mana itu diinstal.

chmod -R 755 /usr/java
Van Peer
sumber
1

Semua langkah operasional (menemukan java, dir induk, mengedit file, ...) satu solusi

zFileProfile="/etc/profile"
zJavaHomePath=$(readlink -ze $(which java) | xargs -0 dirname | xargs -0 dirname)
echo $zJavaHomePath

echo "export JAVA_HOME=\"${zJavaHomePath}\"" >> $zFileProfile
echo "export PATH=\$PATH:\$JAVA_HOME/bin" >> $zFileProfile

Hasil:

# tail -2 $zFileProfile
export JAVA_HOME="/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64"
export PATH=$PATH:$JAVA_HOME/bin

Penjelasan:

1) Ayo pecahkan perintah lengkap menjadi beberapa bagian

$(readlink -ze $(which java) | xargs -0 dirname | xargs -0 dirname)

2) Temukan jalur java dari perintah java

# $(which java)
"/usr/bin/java"

3) Dapatkan jalur relatif dari jalur simbolik

# readlink -ze /usr/bin/java
"/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin/java"

4) Dapatkan jalur induk /usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin/java

# readlink -ze /usr/bin/java | xargs -0 dirname
"/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin"

5) Dapatkan jalur induk /usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin/

# readlink -ze /usr/bin/java | xargs -0 dirname | xargs -0 dirname
"/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64"
ahmet
sumber
0

Gunakan SDKMAN sdkman.io untuk beralih btw. sdk kamu.

Ini menentukan JAVA_HOME untuk Anda.

Stefan Höltker
sumber
0

buka kafka-run-class.sh dengan sudo untuk menulis

Anda dapat menemukan kafka-run-class.sh di folder kafka Anda: kafka / bin / kafka-run-class.sh

periksa garis-garis ini

masukkan deskripsi gambar di sini

Ubah variabel JAVA di bagian lain untuk menunjuk ke executable java di java / bin Anda. seperti JAVA = "$ JAVA_HOME / java"

Ashish Verma
sumber
0

Di / etc / profile, jika Anda membuka itu Anda akan mengetahui bahwa itu TIDAK dianjurkan untuk menulis pada file itu. Alih-alih membuat skrip dari perintah Anda (misalkan test.sh) buka folder /etc/profile.d dan Taruh test.sh di sana. Setiap kali Anda melakukan reboot, itu akan secara otomatis dipanggil oleh / etc / profile.

Noha
sumber
-1

Saya menggunakan garis:

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

ke ~ / .profile saya sehingga menggunakan basis direktori java default saat login. Ini untuk bash.

darkhipo
sumber