Di mana JAVA_HOME di macOS Mojave (10.14) hingga Lion (10.7)?

559

Java adalah paket opsional pada versi terbaru dari macOS.

Namun begitu diinstal itu muncul seperti variabel lingkungan JAVA_HOME tidak diatur dengan benar .

Olivier Refalo
sumber
1
Kemungkinan duplikat dari Apa yang harus saya atur JAVA_HOME di OSX
mipadi
Di Mac Sierra saya sudah / Library / Java / JavaVirtualMachines yang memiliki jdk dan System Preferences> Java apa yang berbeda antara 2 ini?
vikramvi
pertanyaan berbeda, terima kasih
Olivier Refalo
Jangan meremehkan kemungkinan instalasi Java Anda mungkin tidak selesai dengan benar. Jika tidak ada saran di bawah ini yang berfungsi, coba instal!
MarkHu

Jawaban:

1059

Dengan paket opsional Java atau Oracle JDK terinstal, menambahkan salah satu baris berikut ke file ~ / .bash_profile Anda akan mengatur variabel lingkungan yang sesuai.

export JAVA_HOME="$(/usr/libexec/java_home -v 1.6)"
or
export JAVA_HOME="$(/usr/libexec/java_home -v 1.7)"
or
export JAVA_HOME="$(/usr/libexec/java_home -v 1.8)"

Update: menambahkan v bendera berdasarkan Jilles van Gurp respon .

Olivier Refalo
sumber
1
Senang mendengarnya. Saya harus mengatakan saya tidak terlalu senang dengan daftar fitur untuk Lion. Sepertinya tidak ada banyak hal dalam hal peningkatan untuk penggunaan saya ...
prodigitalson
1
@Oliver: ewww :-) Mungkin itu hal yang paling tidak berguna ... saya selalu membuka banyak jendela dan mengatur layar sehingga saya bisa melihat banyak hal sekaligus ... biasanya tata letak yang berbeda di setiap ruang.
prodigitalson
11
ini tidak berhasil untuk saya. /System/Library/Frameworks/JavaVM.framework/Home bekerja.
chaostheory
7
Bekerja di Maverick juga!
cbare
3
Untuk Java 11 dan Sierra Tinggi, ekspor JAVA_HOME = "$ (/ usr / libexec / java_home -v 11)"
Willie Z
112

/usr/libexec/java_homebukan direktori tetapi merupakan executable. Ini menghasilkan JAVA_HOME yang saat ini dikonfigurasi dan tidak benar-benar mengubahnya. Itulah gunanya aplikasi Preferensi Java, yang dalam kasus saya tampaknya rusak dan tidak benar-benar mengubah JVM dengan benar. Memang daftar 1.7 JVM tapi saya bisa beralih / undoggle & drag dan drop semua yang saya inginkan di sana tanpa benar-benar mengubah output /usr/libexec/java_home.

Bahkan setelah menginstal 1.7.0 u6 dari Oracle pada Lion dan menetapkannya sebagai default di preferensi, masih mengembalikan rumah apel 1.6 java. Satu-satunya perbaikan yang benar-benar berfungsi untuk saya adalah menetapkan JAVA_HOME secara manual:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_06.jdk/Contents/Home/

Setidaknya dengan cara ini ketika dijalankan dari baris perintah akan menggunakan 1.7. /usr/libexec/java_homemasih bersikeras 1.6.

Pembaruan : Memahami Java From Command Line pada OSX memiliki penjelasan yang lebih baik tentang cara kerjanya.

export JAVA_HOME=`/usr/libexec/java_home -v 1.7` 

adalah cara untuk melakukannya. Catatan, memperbarui ini ke 1,8 berfungsi dengan baik.

Jilles van Gurp
sumber
blog.hgomez.net/2012/07 rusak tetapi tetap pada jawaban yang sekarang terhubung ke web.archive.org/web/20140813164713/http://blog.hgomez.net/blog/…
Matt C
export JAVA_HOME = "/ usr / libexec / java_home -v 1.8"
Leo Nguyen
83

Bagi saya, Mountain Lion 10.8.2, solusi yang paling banyak dipilih tidak berfungsi. Saya menginstal jdk 1.7 melalui Oracle dan pakar dari homebrew.

Solusi saya adalah dari file hadoop-env.sh dari hadoop yang saya instal dari homebrew juga. Saya menambahkan kalimat di bawah ini di ~ / .bash_profile, dan itu berfungsi.

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

Solusi ini juga berfungsi untuk OS X Yosemite dengan Java 1.8 diinstal dari Oracle.

onpduo
sumber
1
Ini akan berhasil jika Anda menginstal java 6 dari Apple. intinya di sini adalah bahwa Anda menggunakan java oracle 7.
Olivier Refalo
2
Ini bekerja untuk saya di Mavricks dengan sangat baik tetapi lokasi script java_home berbeda. export JAVA_HOME="$(/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java_home)"
Christopher Frost
1
Saya mencoba mengatur pakar di mac Yosemite, cara ini untuk mengatur JAVA_HOME bekerja untuk saya.
Alocus
Bekerja untuk saya di Sierra 10.12 dan Java 8
Kanak Sony
41

Tidak ada jawaban di atas yang membantu saya. Saya kira semua jawaban untuk yang lebih tuaOS X

Untuk OS X Yosemite 10.10, ikuti langkah-langkah ini

Gunakan editor teks favorit Anda untuk membuka: ~/.bash_profile

//This command will open the file using vim
$ vim ~/.bash_profile

Tambahkan baris berikut dalam file dan simpan (: diikuti oleh "x" untuk vim):

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

Kemudian di terminal ketik dua perintah berikut untuk melihat output:

$ source ~/.bash_profile

$ echo $JAVA_HOME

Di baris kedua, Anda memperbarui konten .bash_profilefile.

Giri
sumber
Saya pikir saya mendapatkan pb Anda - Anda menggunakan tanda kutip bukan backquotes 'vs `
Olivier Refalo
Tidak, saya menggunakan kutipan yang benar, sebagai gantinya saya mencoba menyalin paste, itu tidak berhasil. Saya memperbarui jawaban saya karena itu berhasil untuk saya.
Giri
@OlivierRefalo Saya dapat melihat Anda telah memperbarui jawaban Anda dengan tanda kutip ganda ("). Tetapi bahkan tanpa tanda kutip, ia berfungsi.
Giri
Terima kasih banyak . Ini berhasil bagi saya untuk di Yosemite 10,10
Vijay
2
Ini adalah satu-satunya solusi, yang benar-benar berfungsi. Menambahkan jalur dengan solusi lain, akan menambahkan secara sementara, sampai Anda mengakhiri terminal, dan jalur itu hilang. Untuk ditambahkan secara permanen, path harus disimpan dalam file .bash_profile. Sementara itu, saya menggunakan nano daripada vim, untuk kesederhanaan.
Nadeem Jamali
31

Perbarui untuk Java 9 dan beberapa alias rapi.

Dalam .bash_profile:

export JAVA_HOME8=`/usr/libexec/java_home --version 1.8`
export JAVA_HOME9=`/usr/libexec/java_home --version 9`

Perhatikan, bahwa untuk versi terbaru itu 9dan tidak 1.9.

Setel Java aktif:

export JAVA_HOME=$JAVA_HOME8
export PATH=$JAVA_HOME/bin:$PATH

Beberapa alias tambahan untuk beralih di antara versi yang berbeda:

alias j8='export JAVA_HOME=$JAVA_HOME8; export PATH=$JAVA_HOME/bin:$PATH'
alias j9='export JAVA_HOME=$JAVA_HOME9; export PATH=$JAVA_HOME/bin:$PATH'

Tes di terminal:

% j8
% java -version
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
% j9
% java -version
java version "9"
Java(TM) SE Runtime Environment (build 9+181)
Java HotSpot(TM) 64-Bit Server VM (build 9+181, mixed mode)

EDIT: Pembaruan untuk Java 10

export JAVA_HOME10=`/usr/libexec/java_home --version 10`
alias j10='export JAVA_HOME=$JAVA_HOME10; export PATH=$JAVA_HOME/bin:$PATH'

EDIT: Pembaruan untuk Java 11

export JAVA_HOME11=`/usr/libexec/java_home --version 11`
alias j11='export JAVA_HOME=$JAVA_HOME11; export PATH=$JAVA_HOME/bin:$PATH'
Peter Keller
sumber
29

Di atas tidak bekerja untuk saya dengan alat EC2 Amazon, karena mengharapkan bin/javadll di bawahnya JAVA_HOME. /System/Library/Frameworks/JavaVM.framework/Homeberhasil.

Cawflands
sumber
Apakah itu singa? apakah Anda mendapatkan paket Java resmi dari Apple, atau Java6 / 7 dari Oracle?
Olivier Refalo
Saya percaya itu adalah paket Java Apple.
Cawflands
1
@AndrewH ya saya menemukan hal yang sama benar. Menginstal paket Java Apple dan menemukan jalur pustaka yang sebenarnya (misalnya, untuk mengatur -vm di eclipse.ini): /System/Library/Java/Support/Deploy.bundle/Contents/Home/lib/javaws.jar
noogrub
Terimakasih atas infonya. Mungkin saya terlalu sederhana, tetapi mengapa OS X membuat hal yang begitu sederhana menjadi berantakan?
Kuberchaun
18

Untuk OS X yang dapat Anda lakukan:

export JAVA_HOME=`/System/Library/Frameworks/JavaVM.framework/Versions/Current/commands/java_home`
sufinawaz
sumber
Sebagai catatan, HFS + tidak sensitif huruf.
sufinawaz
14

Di Mac OS X Lion, untuk mengatur visualgc agar berjalan, saya menggunakan:

export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home
TELUR
sumber
1
Saya tidak mendapatkan proposal Anda: apa bedanya dengan ekspor JAVA_HOME = /usr/libexec/java_home ? perintah / usr / libexec / java_home mengembalikan /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
Olivier Refalo
Untuk visualgc / usr / libexec / java_home menghasilkan: The java.exe ditemukan di: / usr / libexec / java_home tidak ada dalam direktori JDK. Harap setel dan ekspor variabel lingkungan JVMSTAT_JAVA_HOME Anda untuk merujuk ke direktori yang berisi Sun J2SE 1.5.0 JDK (bukan JRE) dan coba lagi.
EGHM
13

Berikut ini bekerja untuk saya. Saya menggunakan ZSH di OSX Yosemite dengan Java 8 diinstal.

Perintah berikut /usr/libexec/java_homememancarkan path ke rumah JDK:

/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home

Di Anda ~/.zshrc,

export JAVA_HOME = "/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home"
Hemanta
sumber
Bagaimana itu berbeda dari solusi yang diusulkan?
Olivier Refalo
Itu tidak berbeda dengan solusi yang diusulkan. Solusi ini khusus untuk orang yang menggunakan ZSH, Java 8 dan OSX Yosemite.
Hemanta
Dikonfirmasi bekerja seperti pesona dengan java 1.8 diinstal pada OSX Yosemite, cheers mate.
Ashoor
Solusi umum berfungsi dengan baik untuk Java 8, zsh, dan Yosemite.
yaauie
10

Cara yang lebih baik (lebih dapat diupgrade) adalah menggunakan yang berikut ini:

/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home

Ini harus bekerja dengan AWS juga karena memiliki di binbawah Rumah

czarcrab
sumber
1
agak tidak setuju dengan pernyataan "more upgradable" / usr / libexec / java_home adalah exe yang mengembalikan path, bukan path yang tetap. Selain tergantung pada versi jvm apa yang Anda gunakan, jalur di atas tidak akan cocok
Olivier Refalo
10

Oracle JVM yang lebih baru seperti 1.7.0_21-b12 tampaknya diinstal di sini:

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

Archie
sumber
1
Memang - dan /usr/libexec/java_homealat mengembalikan kesalahan untuk versi Java ini.
Joe Dyndale
1
Ini adalah satu-satunya jawaban yang berfungsi untuk saya setelah mengunduh v1.7 JRE
maxrossello
2
Ini adalah jalur jika Anda menginstal JRE. Sebagian besar jawaban dan komentar yang diberi peringkat adalah tentang JDK. Bukan hal yang sama.
8Tidak ada 1
9

untuk macOS Mojave 10.14.1 dan JAVA 11.0.1 saya menetapkan profil sebagai

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

masukkan terminal ini untuk mengkonfirmasi:

$JAVA_HOME/bin/java -version

java version "11.0.1" 2018-10-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.1+13-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.1+13-LTS, mixed mode)
Jiulong Zhao
sumber
1
Bekerja di Catalina. Ty
TuGordoBello
5

Pendekatan saya adalah:

.bashrc

export JAVA6_HOME=`/usr/libexec/java_home -v 1.6`
export JAVA7_HOME=`/usr/libexec/java_home -v 1.7`
export JAVA_HOME=$JAVA6_HOME

# -- optional
# export PATH=$JAVA_HOME/bin:$PATH

Ini membuatnya sangat mudah untuk beralih antara J6 dan J7

Mike Mitterer
sumber
@ AdonisSMU apakah Anda menemukan solusi?
Luccas
3

Saya harus secara eksplisit mengaturnya ke jalur yang tepat di udara Macbook saya.

Langkah-langkah yang diikuti:

  1. coba echo $JAVA_HOME(jika diset maka akan menunjukkan path), jika tidak, coba cari dengan menggunakansudo find /usr/ -name *jdk
  2. Edit Bash p dengan - sudo nano ~/.bash_profile
  3. Tambahkan path yang tepat ke Home JAVA (dengan path dari langkah 2 di atas) export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home
  4. Simpan dan keluar
  5. Periksa JAVA_Home menggunakan - echo $JAVA_HOME

Saya menjalankan MACOS MOJAVE - 10.14.2 (18C54) pada Macbook Air dengan JAVA 8

Robin
sumber
2

Untuk Mac OS X 10.9 saya menginstal versi JRE terbaru dari Oracle dan kemudian mereset JAVA_HOME ke /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home.

Saya yakin ada cara yang lebih baik tetapi membuat saya berdiri dan berlari.

hughsmac: ~ hbrien $ echo $ JAVA_HOME /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home

Hugh Brien
sumber
1
Pada instalasi Mavericks baru, ini adalah satu-satunya solusi yang bekerja untuk saya. Harus menunjuk sqldeveloper ke rumah jdk yang terletak di sini (seperti yang disarankan oleh utas ini untuk membuatnya bekerja.
chris
2

OSX Yosemite, ZSH, dan Java SE Runtime Environment 8, saya harus:

$ sudo ln -s /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands /System/Library/Frameworks/JavaVM.framework/Versions/Current/bin

dan di ~ / .zshrc ubah JAVA_HOME menjadi export JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Versions/Current"

mmell
sumber
1

Mendapat masalah yang sama setelah saya memutakhirkan Mac OS saya dan berikut ini berhasil bagi saya:

  1. cmd> vi ~ / .bash_profile

  2. Tambahkan / perbarui baris untuk JAVA_HOME: export JAVA_HOME = "/ Library / Java / JavaVirtualMachines / jdk1.7.0_15.jdk / Contents / Home"

  3. cmd> source ~ / .bash_profile atau buka terminal baru

Saya pikir versi jdk mungkin berbeda, jadi gunakan saja versi yang Anda miliki di bawah / Library / Java / JavaVirtualMachines /

pengguna1270392
sumber
1

Jika Anda perlu memiliki beberapa versi JDK di bawah Mac OS X (Yosemite), mungkin bermanfaat untuk menambahkan beberapa skrip untuk peralihan otomatis di antara mereka.

Apa yang Anda lakukan adalah mengedit ~ / .bash_profile Anda dan tambahkan yang berikut ini:

function setjdk() {
  if [ $# -ne 0 ]; then
   removeFromPath '/System/Library/Frameworks/JavaVM.framework/Home/bin'
   if [ -n "${JAVA_HOME+x}" ]; then
    removeFromPath $JAVA_HOME
   fi
   export JAVA_HOME=`/usr/libexec/java_home -v $@`
   export PATH=$JAVA_HOME/bin:$PATH
  fi
 }
 function removeFromPath() {
  export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;")
 }
setjdk 1.7

Apa yang dilakukan skrip adalah menghapus versi JDK lainnya di PATH sehingga tidak akan mengganggu versi JDK baru kami. Kemudian ia menggunakan beberapa / usr / libexec / java_home yang merupakan perintah yang mencantumkan versi JDK yang diinstal. The v Argumen memberitahu java_home untuk kembali jalan JDK dengan versi yang disediakan, misalnya 1,7. Kami juga memperbarui PATH untuk menunjuk ke direktori bin dari direktori JAVA_HOME yang baru ditemukan . Pada akhirnya kita cukup menjalankan fungsi menggunakan

setjdk 1.7

yang memilih versi JDK terbaru yang diinstal dari cabang 1.7. Untuk memilih versi tertentu, Anda cukup menjalankan

setjdk 1.7.0_51

sebagai gantinya. Jalankan / usr / libexec / java_home -V untuk mendapatkan detail lebih lanjut tentang cara memilih versi.

PS Jangan lupa untuk mencari ~ / .bash_profile setelah Anda menyimpannya.

azec-pdx
sumber
1

Untuk Java 11 (JDK 11) dapat ditemukan dengan perintah berikut:

/usr/libexec/java_home -v 11
Pavel
sumber
0

Jawaban ini terkait dengan Singa Gunung dan bukan Singa. Saya perlu melakukan ini untuk AWS Command Line Tools. Menurut dokumen AWS , menjalankan which javapengembalian /usr/bin/java.

Jadi, saya atur JAVA_HOME=/usrdi .bashrc.

Rupanya, /usr/bin/javaini adalah tautan simbolis /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/javayang membuat semuanya berfungsi.

Memperbarui

Seperti disebutkan dalam komentar di bawah ini, JAVA_HOMEnilai ini bukan solusi ideal ketika JAVA_HOMEvariabel lingkungan akan digunakan oleh hal-hal selain Alat Baris Perintah AWS. Ini berfungsi dengan baik untuk AWS Command Line Tools, meskipun, sebagaimana diberikan dalam dokumen mereka.

Anjan
sumber
intinya adalah, / usr bukan direktori JAVA_HOME yang benar. Tidak apa-apa untuk menemukan bin / java. Tetapi kadang-kadang pembangun (semut, membuat) menggunakan JAVA_HOME untuk referensi kompiler javac di lib / tools.jar Solusi Anda akan gagal untuk mereka
Olivier Refalo
Ah, terima kasih atas informasinya. Kamu benar. Akan memperbarui jawabannya.
Anjan
0

Untuk Mac Yosemite,

JDK 1.7.0_xx menggunakan

$ ls -ltar /usr/bin/java
/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java

JAVA_HOME

/Library/Java/JavaVirtualMachines/jdk1.7.0_xx.jdk/Contents/Home
Mikey
sumber
Bisakah Anda menambahkan informasi lebih lanjut untuk membuat jawaban ini bermanfaat.
Mika
0

Siapa pun yang menggunakan AUSKEY dari Australian Tax Office (ATO) harus menghapus AUSKEY. Ini menyelesaikan masalah JAVA_HOME saya.

Itu juga tidak lagi diperlukan untuk pengguna MAC. Yah!

Kate
sumber
0

Saya menggunakan kerang Ikan di High Sierra 10.13.4 dan menginstal Java via Brew.

Ini tidak diatur secara otomatis sehingga untuk mengaturnya benar di sistem saya saya jalankan:

set -U JAVA_HOME (/usr/libexec/java_home)
chrismacp
sumber
0

Cukup setel java_home versi 1,8 jdk dalam netbeans.conffile:

/Applications/NetBeans/NetBeans 8.2.app/Contents/Resources/NetBeans/etc/netbeans.conf

baris komentar:

netbeans_jdkhome="path/to/jdk"

dan setel path ke 1.8 jdk Anda, dalam kasus saya:

netbeans_jdkhome="/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home"

Pendekatan ini memungkinkan Anda untuk memiliki beberapa versi jdk pada mac os

Alexander Kolundaev
sumber
0

Untuk pengguna terminal Fish di Mac (saya percaya itu tersedia di Linux juga), ini harus bekerja:

set -Ux JAVA_8 (/usr/libexec/java_home --version 1.8)
set -Ux JAVA_12 (/usr/libexec/java_home --version 12)
set -Ux JAVA_HOME $JAVA_8       //or whichever version you want as default
Jaguar
sumber
-1

untuk pengguna mac. java 8 harus ditambahkan

export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
# JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home

java 6:

export JAVA_HOME=`/usr/libexec/java_home -v 1.6`
# JAVA_HOME=/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

ref: http://qiita.com/seri_k/items/e978c1339ce51f13e297

Kewin
sumber