Bagaimana cara mengatur atau mengubah versi Java (JDK) default pada OS X?

781

Bagaimana Anda bisa mengubah versi standar Java pada mac?

Venkat
sumber
2
apa yang dikatakan pelaksana /usr/libexec/java_home?
Bart
2
/ usr / libexec / java_home mengembalikan /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
Venkat
Bisa jadi Anda hanya perlu reboot. Sudahkah Anda mencobanya?
Bart
Yap menghidupkan kembali komputer dan terminal ... tidak ada perubahan.
Venkat
3
Bisakah Anda menerima jawaban yang sangat dipilih dari @markhellewell di bawah ini? Itu akan membantu saya menemukannya sedikit lebih cepat, dan itu bagus. :)
Taytay

Jawaban:

1410

Jalankan pertama /usr/libexec/java_home -Vyang akan menghasilkan sesuatu seperti berikut:

Matching Java Virtual Machines (3):
1.8.0_05, x86_64:   "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home
1.6.0_65-b14-462, x86_64:   "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
1.6.0_65-b14-462, i386: "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

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

Pilih versi yang Anda inginkan sebagai default ( 1.6.0_65-b14-462demi argumen), lalu:

export JAVA_HOME=`/usr/libexec/java_home -v 1.6.0_65-b14-462`

atau Anda dapat menentukan versi utama saja, seperti:

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

Sekarang ketika Anda menjalankan java -versionAnda akan melihat:

java version "1.6.0_65"
Java(TM) SE Runtime Environment (build 1.6.0_65-b14-462-11M4609)
Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-462, mixed mode)

Tambahkan export JAVA_HOME…baris ke file init shell Anda.

Untuk Bash (sebagaimana dinyatakan oleh antonyh ):

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

Untuk Ikan (sebagaimana dinyatakan oleh ormurin)

set -x JAVA_HOME (/usr/libexec/java_home -d64 -v1.8)
selamat berpisah
sumber
2
@ MattO'Brien itu adalah sesuatu yang tergantung pada shell yang Anda gunakan, dan konfigurasi yang Anda miliki, jadi saya tidak bisa memberikan solusi lengkap untuk itu ...
markhellewell
11
mereka benar-benar backticks exportgaris
David West
6
Ini tidak berhasil untuk saya. Raih jalur dari menjalankan java_home -V dan tambahkan ini ke perintah ekspor, seperti ekspor ini JAVA_HOME = "/ System / Library / Java / JavaVirtualMachines / 1.6.0.jdk / Contents / Home"
oden
68
Ini berfungsi di Bash - export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)- juga perhatikan, java_home memungkinkan kecocokan sebagian sehingga Anda tidak harus menyertakan versi lengkap karena akan menemukan yang terbaru diinstal. Ini membuat pembaruan lebih mudah.
antonyh
15
Pastikan Anda menggunakan `` bukan '' untuk ekspor.
badai salju
410

Jawaban ini adalah upaya untuk mengatasi: bagaimana mengontrol seluruh versi sistem java (tidak hanya di shell yang sedang berjalan) ketika beberapa versi JDK diinstal untuk tujuan pengembangan pada macOS El Capitan atau yang lebih baru (Sierra, High Sierra, Mojave) . Sejauh yang saya tahu, tidak ada jawaban saat ini melakukan itu (*).

Sebagai pengembang, saya menggunakan beberapa JDK, dan saya ingin beralih dari satu ke yang lain dengan mudah. Biasanya saya memiliki yang stabil terbaru untuk penggunaan umum, dan yang lain untuk tes. Tapi saya tidak ingin sistem (misalnya ketika saya memulai IDE saya) menggunakan versi "akses awal" terbaru yang saya miliki untuk saat ini. Saya ingin mengontrol standar sistem, dan itu harus stabil terbaru.

Pendekatan berikut setidaknya bekerja dengan Java 7 hingga 12 (akses awal pada saat penulisan ini), dengan Oracle JDK atau OpenJDK (termasuk build oleh AdoptOpenJDK yang diproduksi setelah pertengahan Oktober 2018 ).

Solusi tanpa alat pihak ke-3:

  • tinggalkan semua JDK di lokasi default mereka, di bawah /Library/Java/JavaVirtualMachines. Sistem akan memilih versi tertinggi secara default.
  • Untuk mengecualikan JDK agar tidak dipilih secara default, ganti namanya Contents/Info.plistmenjadiInfo.plist.disabled . JDK itu masih dapat digunakan ketika $JAVA_HOMEmenunjuk ke sana, atau secara eksplisit direferensikan dalam skrip atau konfigurasi. Itu hanya akan diabaikan oleh javaperintah sistem .

Peluncur sistem akan menggunakan JDK dengan versi tertinggi di antara mereka yang memiliki Info.plistfile.

Saat bekerja dalam shell dengan JDK alternatif, pilih metode Anda di antara jawaban yang ada ( jenv, atau kustomkan skrip / skrip /usr/libexec/java_home, dll).


Detail investigasi dalam inti ini .


(*) Jawaban saat ini sudah usang (tidak lagi berlaku untuk macOS El Capitan atau Sierra), atau hanya membahas JDK tunggal, atau tidak membahas aspek sistem secara keseluruhan. Banyak yang menjelaskan bagaimana cara mengubahnya $JAVA_HOME, tetapi ini hanya memengaruhi shell saat ini dan apa yang diluncurkan dari sana. Ini tidak akan memengaruhi aplikasi yang dimulai dari peluncur OS (kecuali jika Anda mengubah file yang tepat dan logout / login, yang membosankan). Sama untuk jenv, keren dan semuanya, tapi sejauh yang saya tahu itu hanya mengubah variabel lingkungan, sehingga memiliki keterbatasan yang sama.

Hugues M.
sumber
16
Ini adalah jawaban yang saya cari, karena jenvtidak JAVA_HOMEjuga dapat mengatur versi java seluruh sistem, yaitu yang akan digunakan Eclipse.
Giovanni Lovato
3
@Rodrigo Ya, seperti yang disebutkan dalam "Detail penyelidikan" (ditautkan di atas): "Menginstal JDK juga menimpa /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/. Rupanya ini adalah yang akan diluncurkan panel Preferensi baru - ini adalah satu-satunya pengecualian yang saya temukan untuk solusi saya: bahwa thingy masih akan menggunakan JDK9 (terbaru saya instal), tetapi tidak ada aplikasi Java lain yang melakukannya. "
Hugues M.
2
Patut dicatat bahwa versi java ditemukan di / Library / Java / JavaVirtualMachines, dan bahwa solusi kerja terbaik di atas berada dalam konteks itu.
Andrew Kostka
3
Tepatnya, ini adalah solusi terbaik dan paling fungsional untuk pertanyaan ini. Sayangnya begitu.
Aerodynamika
3
Saya tidak bisa cukup berterima kasih atas jawaban ini. Ini tetap meluncurkan aplikasi dari peluncur OS.
Karthic Raghupathi
248

Menambahkan ke jawaban di atas, saya meletakkan baris berikut di .bash_profile(atau .zshrcuntuk MacOS 10.15+) saya yang membuatnya sangat nyaman untuk beralih (termasuk komentar @ elektromin untuk java 9):

alias j12="export JAVA_HOME=`/usr/libexec/java_home -v 12`; java -version"
alias j11="export JAVA_HOME=`/usr/libexec/java_home -v 11`; java -version"
alias j10="export JAVA_HOME=`/usr/libexec/java_home -v 10`; java -version"
alias j9="export JAVA_HOME=`/usr/libexec/java_home -v 9`; java -version"
alias j8="export JAVA_HOME=`/usr/libexec/java_home -v 1.8`; java -version"
alias j7="export JAVA_HOME=`/usr/libexec/java_home -v 1.7`; java -version"

Setelah memasukkan, jalankan $ source .bash_profile

Saya bisa beralih ke Java 8 dengan mengetik berikut:

$ j8
java version "1.8.0_102"
Java(TM) SE Runtime Environment (build 1.8.0_102-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)
Justin Zhang
sumber
5
Ini adalah sintaks untuk Java 9: alias j9="export JAVA_HOME=`/usr/libexec/java_home -v 9`; java -version"
elektromin
3
Alias ​​sederhana yang mengagumkan untuk pergantian cepat.
gbonetti
Menggunakan alias j10="export JAVA_HOME=`/usr/libexec/java_home`; java -version"dan kemudian mengetik j10memungkinkan Anda untuk beralih kembali ke versi Java saat ini (dalam kasus saya Java 10)
intagli
Saya akan membuat alat cli mirip dengan nvmuntuk beralih versi Java, tetapi akronim jvmsudah berarti sesuatu yang lain :)
Andy
Saya mendapatkan kesalahan ini saat mencari: /Users/me/.zshrc:8: permission denied: /Library/Java/JavaVirtualMachines/openjdk-12.jdk/Contents/Home
cosbor11
56

Fungsi ikan kecil berdasarkan / usr / libexec / java_home

function jhome
    set JAVA_HOME (/usr/libexec/java_home $argv)
    echo "JAVA_HOME:" $JAVA_HOME
    echo "java -version:"
    java -version
end

Jika Anda tidak menggunakan ikan, Anda dapat melakukan hal serupa di bash:

#!/bin/bash

jhome () {
  export JAVA_HOME=`/usr/libexec/java_home $@`
  echo "JAVA_HOME:" $JAVA_HOME
  echo "java -version:"
  java -version
}

Kemudian untuk beralih di antara jawa lakukan:

$> jhome           #switches to latest java
$> jhome -v 1.7    #switches to java 1.7
$> jhome -v 1.6    #switches to java 1.6

ref: https://gist.github.com/kenglxn/1843d552dff4d4233271

kenglxn
sumber
1
ini hanya berubah untuk sesi terminal spesifik. Apakah ada cara untuk memperbarui ini untuk mengubahnya di seluruh sistem?
ENG618
1
Saya harus menulis export JAVA_HOME=(/usr/libexec/java_home $argv)alih-alih fungsi baris kedua dari Anda jhome.
Daniel AA Pelsmaeker
32

Agak sulit, tetapi cobalah mengikuti langkah-langkah yang dijelaskan dalam Menginstal Java pada OS X 10.9 (Mavericks) . Pada dasarnya, Anda harus memperbarui alias ke java.

Selangkah demi selangkah:

Setelah menginstal JDK 1.7, Anda harus melakukan sudo ln -snfuntuk mengubah tautan ke arus java. Untuk melakukannya, buka Terminal dan berikan perintah:

sudo ln -nsf /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents \
/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK

Perhatikan bahwa direktori jdk1.7.0_51.jdkdapat berubah tergantung pada versi SDK yang telah Anda instal.

Sekarang, Anda perlu mengatur JAVA_HOMEke titik di mana jdk_1.7.0_xx.jdktelah diinstal. Buka lagi Terminal dan ketik:

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

Anda dapat menambahkan export JAVA_HOMEbaris di atas dalam .bashrcfile Anda untuk memiliki java secara permanen di Terminal Anda

Trein
sumber
1
bagaimana cara mengatur Variabel JAVA_HOME? apakah ada tempat tertentu yang saya atur?
Venkat
di mana saya mengekspor JAVA_HOME? dan di mana itu akan diselamatkan?
Venkat
1
Saya sudah memperbarui jawabannya. Apakah Anda tahu versi SDK yang telah Anda instal? Nama folder mengambil nomor versi SDK, jadi perintah di atas mungkin sedikit berubah.
Trein
Saya menginstal yang terbaru, saya pikir itu adalah 51.
Venkat
Variabel JAVA_HOMEakan diekspor pada sesi Terminal saat ini. Anda dapat menambahkannya ke kami .bashrcjika Anda mau. Saya akan menyesuaikan perintah dengan versi terakhir.
Trein
32

Menggunakan jenv adalah cara yang mudah.

1. Pasang jenv

    curl -s get.jenv.io | pesta

2. Konfigurasi jenv

    cd ~ / .jenv / kandidat /
    mkdir java
    cd java
    mkdir 1.7
    mkdir 1.8

3. Hubungkan tautan jdk

    ln -s /Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin ~ / .jenv / kandidat / java / 1.7
    ln -s /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/bin ~ / .jenv / kandidat / java / 1.8

4. Anda sudah siap

beralih perintah:

jenv menggunakan java 1.8

set standar:

jenv default java 1.7

Yuantao
sumber
Solusi bersih dan menyenangkan.
pinturic
Alih-alih "jenv use java 1.8", saya harus menggunakan "jenv shell 1.8". "shell" juga bisa "global" atau "lokal" tergantung kebutuhan.
Steve Gelman
1
jenv bagus ketika bekerja. Akan merekomendasikan menentangnya, karena tidak "benar-benar" mengubah versi java default yang digunakan, terbukti dengan menjalankan perintah "/ usr / libexec / java_home -V", hanya JAVA_HOME. Ini menyebabkan masalah aneh dengan beberapa aplikasi, misalnya Eclipse.
simon
Selain itu bagian paranoidal saya menyarankan agar tidak melengkung apapun untuk bash. Bahkan jika Anda berpikir situs tersebut tepercaya, tidak ada yang bisa menjamin Anda itu tidak bisa diretas. Gunakan manajer paket OS Anda.
Aleksandr Kravets
Info itu sudah usang. Periksa dokumentasi resmi atau instruksi lebih detail .
fabianopinto
28

instal JDK, bukan hanya JRE

/usr/libexec/java_home -v 1.8

memberi

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

lanjut

touch .bash_profile

open -a TextEdit.app .bash_profile

TextEdit akan menampilkan halaman kosong yang dapat Anda isi.

tambahkan ke dokumen: export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home

di terminal:

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

coba perintah:

javac -version

harus menghasilkan:

javac 1.8.0_111
pengguna2708060
sumber
26

tl; dr

Tambahkan baris:

export JAVA_HOME='/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home'

ke file

~/.bash_profile

(ganti jdk1.8.0_144.jdk dengan versi yang Anda unduh)

kemudian source ~/.bash_profile

dustinevan
sumber
22

Gunakan jenv, itu seperti manajer lingkungan Java. Ini sangat mudah digunakan dan bersih

Untuk Mac, ikuti langkah-langkahnya:

brew install jenv

git clone https://github.com/gcuisinier/jenv.git ~/.jenv

Instalasi: Jika Anda menggunakan bash ikuti langkah-langkah ini:

$ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile

echo 'eval "$(jenv init -)"' >> ~/.bash_profile

$ exec $SHELL -l

Tambahkan versi JVM yang diinginkan ke jenv:

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

jenv add /System/Library/Java/JavaVirtualMachines/1.8.0.jdk/Contents/Home

Periksa versi yang diinstal:

jenv versions

Setel versi Java yang ingin Anda gunakan dengan:

jenv global oracle64-1.6.0
slal
sumber
Ini bekerja sempurna untuk saya, terima kasih!
Fernando Gabrieli
Saya menggunakan alat serupa: sdkman.io/usage - pendekatan IMHO jauh lebih baik daripada alias manual dll
SathOkh
12
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
}

menempatkan ini dalam Anda ~ / .profile dan menggunakannya di dalam terminal seperti begitu setjdk 1.8, setjdk 1.7, setjdk 9dll ...

Jika Anda tidak memilikinya removeFromPathmaka:

function removeFromPath() { export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;") }

Gabriel Reiser
sumber
12

Empat langkah mudah menggunakan terminal untuk orang-orang yang menggunakan proses default .. :)

  1. echo $JAVA_HOMEmemberi Anda rumah java saat ini. Untuk misalnya:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/

  2. cd /Library/Java/JavaVirtualMachines/ akan membawa Anda ke folder tempat Anda biasanya menginstal jdks (Ini mungkin berbeda untuk mesin Anda)

  3. lsmenunjukkan Anda tersedia folder (biasanya itu akan memiliki nomor versi, untuk misalnya: jdk1.8.0_191.jdk openjdk-11.0.2.jdk)
  4. export JAVA_HOME='/Library/Java/JavaVirtualMachines/openjdk-11.0.2.jdk/Contents/Home' akan mengubah home java ..
Abbin Varghese
sumber
8

tambahkan perintah berikut ke ~/.zshenvfile

export JAVA_HOME=`/usr/libexec/java_home -v 1.8` 
xsilen T
sumber
8

macOS El Capitan atau yang lebih baru akan memilih versi JDK yang lebih tinggi yang tersedia di /Library/Java/JavaVirtualMachines, jadi untuk menurunkan versi Anda dapat mengubah nama file Info.plistmenjadi sesuatu yang lain seperti Info.plist.disabledsehingga OS akan memilih versi sebelumnya.

Joaquín L. Robles
sumber
Cara termudah untuk (: Terima kasih
Satheesh Srinivasan
6

Dari halaman manual java_home (1) resmi Apple :

**USAGE**

   /usr/libexec/java_home  helps  users  set a $JAVA_HOME in their login rc files, or provides a way for
   command-line Java tools to use the most appropriate JVM which can satisfy a minimum version or archi-
   tecture  requirement.  The --exec argument can invoke tools in the selected $JAVA_HOME/bin directory,
   which is useful for starting Java command-line tools from launchd plists without hardcoding the  full
   path to the Java command-line tool.

   Usage for bash-style shells:
          $ export JAVA_HOME=`/usr/libexec/java_home`

   Usage for csh-style shells:
          % setenv JAVA_HOME `/usr/libexec/java_home`
Antonio
sumber
6

Jika masih Anda tidak dapat mengaturnya. menggunakan perintah ini.

export JAVA_HOME =/usr/libexec/java_home -v 1.8

maka Anda harus menggunakan yang ini.

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

itu pasti akan berhasil.

RohitKumar
sumber
6

Pertama cari tahu di mana Anda menyimpan variabel- lingkungan

  1. emacs
  2. bash_profile
  3. file zshrc

Langkah-langkah untuk Mengatur variabel lingkungan: -

  1. Unduh jdk dari JAVA
  2. instal dengan klik dua kali
  3. Sekarang atur variabel lingkungan di file Anda

    Sebuah. Untuk emacs.profile Anda dapat menggunakan tautan ini ATAU lihat tangkapan layar di bawah ini

masukkan deskripsi gambar di sini

b. Untuk pengaturan profil ZSH -

1. export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home

2. source ~/.zshrc - Restart zshrc to reflect the changes.

3. echo $JAVA_HOME - make sure path is set up properly 
   ----> /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home

4. java -version 

   -->  java version "1.8.0_112"  Java(TM) SE Runtime Environment (build 1.8.0_112-b16)Java HotSpot(TM) 64-Bit Server VM (build 25.112-b16, mixed mode)

Semua sudah diatur, Anda dapat dengan mudah meningkatkan atau menurunkan versi JAVA ..

Vrushali Raut
sumber
5

JDK Beralih Skrip

Saya telah mengadaptasi jawaban dari @Alex di atas dan menulis yang berikut untuk memperbaiki kode untuk Java 9.

$ cat ~/.jdk
#!/bin/bash

#list available jdks
alias jdks="/usr/libexec/java_home -V"
# jdk version switching - e.g. `jdk 6` will switch to version 1.6
function jdk() {
  echo "Switching java version $1";

  requestedVersion=$1
  oldStyleVersion=8
  # Set the version
  if [ $requestedVersion -gt $oldStyleVersion ]; then
    export JAVA_HOME=$(/usr/libexec/java_home -v $1);
  else
    export JAVA_HOME=`/usr/libexec/java_home -v 1.$1`;
  fi

  echo "Setting JAVA_HOME=$JAVA_HOME"

  which java
  java -version;
}

Beralih ke Java 8

$ jdk 8
Switching java version 8
Setting JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home
/usr/bin/java
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)

Beralih ke Java 9

$ jdk 9
Switching java version 9
Setting JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home
/usr/bin/java
java version "9.0.1"
Java(TM) SE Runtime Environment (build 9.0.1+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.1+11, mixed mode)
Marcello de Sales
sumber
4

Anda dapat menambahkannya ke .bash_profile Anda agar versi diset secara default.

//Open bash profile
open ~/.bash_profile

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

// run bash profile
source ~/.bash_profile
Amin Agha
sumber
Terima kasih! Yang perlu diperhatikan, Anda harus menyertakan tanda `. dan jelas, ganti 1,8 dengan versi apa pun yang Anda butuhkan. Dalam kasus saya 13.0.2
Jamie S
3

Jika Anda menggunakan ikan dan Anda menggunakan mac dan Anda ingin dapat beralih di antara JDK, maka di bawah ini berfungsi untuk saya di mac.

@ kenglxn jawaban tidak bekerja untuk saya dan saya menemukan itu bcos tidak mengatur -g yang global!

Letakkan di bawah ini di bawah ~ / .config / fish / config.fish

alias j8="jhome  -v 1.8.0_162"
alias j9="jhome  -v 9.0.1"

function jhome
    set -g -x JAVA_HOME (/usr/libexec/java_home $argv)
    echo "JAVA_HOME:" $JAVA_HOME
    echo "java -version:"
    java -version
end

funcsave jhome

Untuk mengetahui versi / versi minor apa yang telah Anda instal, Anda dapat melakukan:

/usr/libexec/java_home -V                                                                              579ms  Wed 14 Feb 11:44:01 2018
Matching Java Virtual Machines (3):
    9.0.1, x86_64:  "Java SE 9.0.1" /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home
    1.8.0_162, x86_64:  "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home
    1.8.0_121, x86_64:  "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home
Gob00st
sumber
2

Jika Anda memiliki beberapa versi dan Anda ingin menjalankan sesuatu dengan menggunakan versi tertentu, gunakan contoh ini:

/usr/libexec/java_home -v 1.7.0_75 --exec java -jar you-file.jar
MonstroDev
sumber
2

Berdasarkan jawaban @markhellewell saya membuat beberapa fungsi alias yang akan melakukannya untuk Anda. Cukup tambahkan ini ke file startup shell Anda

#list available jdks
alias jdks="/usr/libexec/java_home -V"
# jdk version switching - e.g. `jdk 6` will switch to version 1.6
function jdk() { 
  echo "Switching java version"; 
  export JAVA_HOME=`/usr/libexec/java_home -v 1.$1`; 
  java -version; 
}

https://gist.github.com/Noyabronok/0a90e1f3c52d1aaa941013d3caa8d0e4

Alex
sumber
2

Inilah cara saya melakukannya di Linux saya (Ubuntu / Mint mate) , saya kira Mac dapat melakukannya dengan cara yang sama.


Instal & konfigurasi

Langkah:

  • [Dasar - bagian]
  • Unduh jdk ( file .tgz ) dengan tangan.
  • Buka kompresi & ganti nama dengan benar, di lokasi yang tepat.
    misalnya /mnt/star/program/java/jdk-1.8
  • Buat tautan lunak, yang akan diubah untuk beralih versi java nanti.
    misalnya ln -s /mnt/star/program/java/jdk-1.8 /mnt/star/program/java/java
    demikian /mnt/star/program/java/javaadalah tautan lunak.
  • Ditetapkan JAVA_HOMEdalam skrip mulai.
    Bisa menggunakan suka file /etc/profile.d/eric.sh, atau cukup gunakan ~/.bashrc.
    misalnyaJAVA_HOME=/mnt/star/program/java/java
  • Kemudian buka bash shell baru. java -versionharus mencetak versi java.
  • [Versi lainnya - bagian]
  • Unduh & pasang lebih banyak versi Java, sesuai kebutuhan, sama seperti langkah-langkah di atas.
    misalnya
    /mnt/star/program/java/jdk-11
  • [Beralih - bagian]
  • Dalam ~/.bashrc, tentukan variabel untuk berbagai versi Java.
    misalnya
    _E_JAVA_HOME_11='/mnt/star/program/java/jdk-11'
    _E_JAVA_HOME_8='/mnt/star/program/java/jdk-8'
    # dir of default version,
    _E_JAVA_HOME_D=$_E_JAVA_HOME_8
  • Di ~/.bashrc, tentukan perintah untuk mengganti versi Java.
    misalnya
    ## switch java version,
    alias jv11="rm $JAVA_HOME; ln -s $_E_JAVA_HOME_11 $JAVA_HOME"
    alias jv8="rm $JAVA_HOME; ln -s $_E_JAVA_HOME_8 $JAVA_HOME"
    # default java version,
    alias jvd="rm $JAVA_HOME; ln -s $_E_JAVA_HOME_D $JAVA_HOME"
    alias jv="java -version"
  • Di terminal, source ~/.bashrcuntuk membuat perubahan berlaku.
  • Kemudian bisa beralih menggunakan perintah yang ditentukan.

Perintah - dari konfigurasi di atas

Perintah:

  • jv11
    Beralih ke Java 11
  • jv8
    Beralih ke Java 8
  • jvd
    Beralih ke versi Java default, yang dilambangkan dengan _E_JAVA_HOME_Ddidefinisikan di atas.
  • jv
    Tampilkan versi java.

Contoh output:

eric@eric-pc:~$ jv
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

eric@eric-pc:~$ jv11
eric@eric-pc:~$ jv
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)

eric@eric-pc:~$ jvd
eric@eric-pc:~$ jv
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

eric@eric-pc:~$ 

Mekanisme

  • Ini beralih dengan mengubah tautan lunak, yang digunakan sebagai JAVA_HOME.

Kiat

  • Di komputer saya ketika menginstal jdk dengan tangan, saya menyimpan versi minor, lalu membuat tautan lunak dengan versi utama tetapi tanpa versi minor.
    mis.
    // ini adalah direktori aktual,
    jdk1.8.0_191

    // ini adalah tautan lunak ke jdk1.8.0_191
    jdk-8

    // ini adalah tautan lunak ke jdk-8ataujdk-11
    java

  • Saya mendefinisikan perintah alias di ~/.bashrc, tetapi mendefinisikan variabel dalam file terpisah.
    Saya menggunakan ~/.eric_varuntuk mendefinisikan variabel, dan ~/.bashrcakan sumbernya (misalnya source $HOME/.eric_var).

Eric Wang
sumber
1

Cara mudah untuk memasukkan JDK yang diinstal secara terpisah dalam daftar yang diberikan oleh /usr/libexec/java_home -Vadalah dengan menghubungkan direktori sebagai berikut:

sudo ln -s path/to/jdk /Library/Java/JavaVirtualMachines/jdk-[some-identifier].jdk

Misalnya, untuk mendaftarkan JDK yang disertakan dengan Android Studio (1.8.0_152 pada saat penulisan), gunakan:

sudo ln -s /Applications/Android\ Studio.app/Contents/jre/jdk /Library/Java/JavaVirtualMachines/jdk-android-studio.jdk

Sekarang java_homeakan daftar JDK di bawah Matching Java Virtual Machinesdan Anda dapat memilihnya seperti yang dijelaskan di atas.

friederbluemle
sumber
1

Saya telah melakukannya untuk terminal lokal

export JAVA_8_HOME=(/Library/Java/JavaVirtualMachines/jdk1.8.0_221.jdk/Contents/Home/)
export JAVA_13_HOME=(/Library/Java/JavaVirtualMachines/jdk-13.0.1.jdk/Contents/Home/)

alias java8='export JAVA_HOME=$JAVA_8_HOME; alias java="$JAVA_8_HOME/bin/java"; $JAVA_8_HOME/bin/java -version'
alias java13='export JAVA_HOME=$JAVA_13_HOME; alias java="$JAVA_13_HOME/bin/java"; $JAVA_13_HOME/bin/java -version'

export JAVA_HOME=$JAVA_13_HOME
Lacak
sumber
-6

TERLALU MUDAH SOLUSI: Sungguh sakit kepala - ini adalah solusi cepat dan mudah yang bekerja untuk saya.

Mac OS Sierra Versi 10.12.13

  1. Gunakan tombol pintas: CMD + SHIFT + G - ketik "/ Library /"

  2. Temukan folder JAVA

  3. Klik Kanan Java Folder = Pindahkan ke Sampah (Diperlukan Kata Sandi)

  4. Instal: Java SE Development Kit 8 jdk-8u131-macosx-x64.dmg | Unduh Javascript SDK

  5. Pastikan folder JAVA baru muncul di / PERPUSTAKAAN /
  6. Instal Eclipse | Instal Eclipse IDE untuk Pengembang Java
  7. Boom Dilakukan
eric323
sumber