Apa yang harus saya setel variabel lingkungan JAVA_HOME di macOS X 10.6?

436

Banyak aplikasi Java yang menggunakan skrip shell untuk mengonfigurasi lingkungannya menggunakan JAVA_HOMEvariabel lingkungan untuk memulai versi Java yang benar, mencari JRE JAR, dan sebagainya.

Di macOS X 10.6, jalur berikut ini tampaknya valid untuk variabel ini

/Library/Java/Home
/System/Library/Frameworks/JavaVM.framework/Home
/System/Library/Frameworks/JavaVM.framework/Versions/Current

Beberapa di antaranya adalah symlink ke VM aktual saat ini (sebagaimana didefinisikan dalam panel Preferensi Java).

Tetapi yang mana yang harus digunakan — atau bolehkah menggunakannya?

Robert Christie
sumber

Jawaban:

849

Saya hanya mengatur JAVA_HOMEke output dari perintah itu, yang akan memberi Anda path Java yang ditentukan dalam preferensi Java Anda. Berikut cuplikan dari .bashrcfile saya , yang menetapkan variabel ini:

export JAVA_HOME=$(/usr/libexec/java_home)

Saya belum mengalami masalah dengan teknik itu.

Kadang-kadang saya harus mengubah nilai JAVA_HOMEke versi Java yang lebih lama. Sebagai contoh, satu program yang saya pertahankan membutuhkan Java 5-bit pada OS X, jadi ketika menggunakan program itu, saya atur JAVA_HOMEdengan menjalankan:

export JAVA_HOME=$(/usr/libexec/java_home -v 1.5)

Bagi Anda yang tidak memiliki java_homejalur Anda tambahkan seperti ini.

sudo ln -s /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java_home /usr/libexec/java_home

Referensi :

mipadi
sumber
20
Mountain Lion juga memilikinya
sghill
57
Masih berlaku untuk Mavericks
Pascal
42
Masih berlaku untuk Yosemite. ;)
Geoffrey Wiseman
42
Kapten. Memeriksa!
gattshjoty
11
Masih berlaku untuk Mojave
Keuha
40

Juga, sangat menarik untuk mengatur PATH Anda untuk mencerminkan JDK. Setelah menambahkan JAVA_HOME (yang dapat dilakukan dengan contoh yang dikutip oleh 'mipadi'):

export JAVA_HOME=$(/usr/libexec/java_home)

Tambahkan juga di ~ / .profile:

export PATH=${JAVA_HOME}/bin:$PATH

PS: Untuk OSX, saya biasanya menggunakan. Profil di direktori HOME daripada .bashrc

lucasarruda
sumber
Untuk OSX yang menjalankan default bash, saya biasanya menggunakan bash .bash_profile- mengapa Anda menggunakan generik .profile?
LeeGee
1
Karena .profilegenerik, ia akan bekerja dengan shatau bash, sementara .bash_profileeksklusif untuk bash. Ini juga mengisolasi pengaturan dari aplikasi yang menggunakan .bash_profile, seperti MacPorts. Tapi Anda bisa menggunakan salah satu dari keduanya dengan aman. Lihat lebih lanjut di sini
lucasarruda
1
- FYI, tautan yang Anda berikan mengonfirmasi kecurigaan saya bahwa di bawah bash (yaitu secara default), penggunaan .bash_profilepenggantian .profile.
LeeGee
@ LeeGee ya, dan itu karena .bash_profilespesifik, sedangkan .profilegenerik, untuk semua shvariasi.
lucasarruda
1
Karena OS / X menempatkan tautan ke javadalam Anda, /usr/binseharusnya tidak ada kebutuhan untuk menambahkan secara eksplisit $JAVA_HOMEke jalur Anda.
Zac
20

Saya memiliki MAC OS X (Sierra) 10.12.2 .

Saya mengatur JAVA_HOME untuk bekerja pada Bereaksi Asli (untuk aplikasi Android) dengan mengikuti langkah-langkah berikut.

  • Buka Terminal (Perintah + R, ketik Terminal, Tekan ENTER).

  • Tambahkan baris berikut ke ~ / .bash_profile . export JAVA_HOME=$(/usr/libexec/java_home)

  • Sekarang jalankan perintah berikut. source ~/.bash_profile

  • Anda dapat memeriksa nilai tepat JAVA_HOME dengan mengetik perintah berikut. echo $JAVA_HOME

Nilai (output) yang dikembalikan akan seperti di bawah ini. /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home

Itu dia.

camar
sumber
Ini membantu, terima kasih. Tapi saya yakin Anda melewatkan termasuk langkah terakhir, yang kemudian menetapkan JAVA_HOME ke nilai yang dikembalikan dalam .bashrc / .bash_profile / .zshrc / dll. Harap perbaiki saya jika saya salah.
TheProletariat
2
Itu tidak wajib. Dalam kasus saya, $JAVA_HOMEmerujuk $(/usr/libexec/java_home)dan $(/usr/libexec/java_home) secara internal disebut /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Homeoleh Sistem.
hygull
1
Oke. Itu diperlukan dalam kasus saya. Terima kasih.
TheProletariat
14

Saya menggunakan Mac OS 10.6.8

Solusi termudah bagi saya adalah sederhananya

$ export JAVA_HOME=$(/usr/libexec/java_home)

Untuk menguji apakah itu berfungsi, masukkan

$ echo $JAVA_HOME

itu menunjukkan

/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

Anda juga dapat menguji

$ which java
Rae
sumber
9

Saya cenderung menggunakan /Library/Java/Home. Cara panel preferensi bekerja ini harus up to date dengan versi pilihan Anda.

Clint
sumber
/tempat sampah . dan periksa apakah itu menunjuk ke / Library / java dan bukan / System / Library / .. karena yang satu mungkin sudah usang.
JRun
1
Ini tidak lagi akurat. Pada OS X 10.5 dan yang lebih baru, gunakan / usr / libexec / java_home untuk menemukan path.
Kristopher Johnson
8

Bahwa di atas tidak berfungsi lagi di YOSEMITE untuk APLIKASI GRAFIS! Seperti gerhana, atau apa pun yang dimulai dengan Spotlight. (.bash_profile, launchd.conf hanya berfungsi untuk sesi terminal.) Sebelum memulai eclipse, cukup buka jendela terminal, dan berikan perintah berikut:

launchctl setenv JAVA_HOME /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home

(Dengan jalur instalasi Anda! Mungkin berfungsi dengan $ (/ usr / libexec / java_home) alih-alih path lengkapnya juga.)

Lihat seluruh artikel bagus tentang solusi permanen di sini: Mengatur variabel lingkungan melalui launchd.conf tidak lagi berfungsi di OS X Yosemite / El Capitan / macOS Sierra?

Possossy László
sumber
2

Saya telah menemukan tumpukan ini untuk membantu, saya mengalami masalah yang sama dan saya dapat memperbaikinya:

Path java saya ada di sini:

/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home

dan diperlukan untuk dimasukkan ke dalam .bash_profile:

export JAVA_HOME=\"/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home\"

Semoga bantuan

Shirow
sumber
2

Melewati pengaturan Terminal sejak Anda menyebutkan aplikasi, pengaturan variabel lingkungan sistem permanen (berfungsi untuk macOS Sierra; harus juga berfungsi untuk El Capitan):

launchctl setenv JAVA_HOME $(/usr/libexec/java_home -v 1.8)

(ini akan mengatur JAVA_HOME menjadi 1,8 JDK terbaru, kemungkinan Anda telah melalui pembaruan serveral misalnya javac 1.8.0_101, javac 1.8.0_131)
Tentu saja, ubah 1,8 ke 1,7 atau 1,6 (sungguh?) sesuai dengan kebutuhan Anda dan sistem Anda

ericn
sumber
1

Seperti yang dicatat oleh jawaban lain, cara yang benar untuk menemukan direktori home Java adalah menggunakan /usr/libexec/java_home.

Dokumentasi resmi untuk ini ada di Tanya Jawab Teknis Apple QA1170: Direktori Java Penting di OS X : https://developer.apple.com/library/mac/qa/qa1170/_index.html

Kristopher Johnson
sumber
Ini duplikat!
Franklin Yu
Saya pikir dimasukkannya tautan ke dokumentasi resmi Apple membuatnya tidak berlebihan. Tetapi jika ya, tindakan yang benar adalah menandainya sebagai Duplikat, bukan membuat komentar.
Kristopher Johnson
Saya membuat komentar karena saya tidak dapat menandai jawaban sebagai duplikat. Stack Overflow hanya memungkinkan pengguna untuk menandai pertanyaan sebagai duplikat (sayangnya). Tautan ini bermanfaat, tetapi saya pikir komentar untuk jawaban saat ini (atau cukup edit dengan tautan karena Anda sudah memiliki kemampuan) akan lebih baik karena memusatkan semua informasi yang berguna dalam satu jawaban tunggal. Saya percaya ada pedoman di suatu tempat yang Stack Overflow lebih suka memperbaiki jawaban saat ini daripada menulis yang baru.
Franklin Yu
1

Bagi saya maven tampaknya bekerja di luar .mavenrcfile:

echo "export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)" > ~/.mavenrc

Saya yakin saya mengambilnya di SO juga, hanya tidak ingat di mana.

maksimov
sumber
1

Buat file ~/.mavenrc

lalu tempel ini ke file

export JAVA_HOME=$(/usr/libexec/java_home)

uji

mvn -v

KhaledMohamedP
sumber
Saya suka pendekatan ini, karena itu memungkinkan saya untuk mengubah versi Java sangat mudah dalam file .mavenrc.
Spindizzy
1

Disarankan untuk memeriksa shell terminal default sebelum menetapkan variabel lingkungan JAVA_HOME , melalui perintah berikut:

$ echo $SHELL
/bin/bash

Jika terminal default Anda adalah / bin / bash (Bash), maka Anda harus menggunakan metode @hygull

Jika terminal default Anda adalah / bin / zsh (Z Shell), maka Anda harus mengatur variabel lingkungan ini di file ~ / .zshenv dengan konten berikut:

export JAVA_HOME="$(/usr/libexec/java_home)"

Demikian pula, setiap jenis terminal lain yang tidak disebutkan di atas, Anda harus mengatur variabel lingkungan di masing-masing file terminal env.

Metode ini diuji bekerja di macOS Mojave Versi 10.14.6 .

Jerry Chong
sumber
-1

Untuk pengguna Fish Shell, gunakan sesuatu seperti berikut: alias java7 "set -gx JAVA_HOME (/usr/libexec/java_home -v1.7)"

Yichuan Wang
sumber