Mac OS X dan beberapa versi Java

333

Bagaimana saya bisa menginstal java tambahan di MacOS? Saya menginstal jdk8 dan itu berfungsi dengan baik. tapi sekarang saya membutuhkan instalasi jdk7 untuk keperluan pengembangan. Ketika mencoba menginstal versi lama melalui file DMG, saya mendapat peringatan, bahwa sudah ada versi java yang lebih baru yang diinstal dan installer berhenti.

/usr/libexec/java_home -verbose
Matching Java Virtual Machines (1):
    1.8.0_20, x86_64:   "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk/Contents/Home

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

Bagaimana cara menginstal jdk7 selain yang ini?

Terima kasih
Dakky

Dakkar
sumber

Jawaban:

493

Cara terbersih untuk mengelola beberapa versi java di Mac adalah menggunakan Homebrew.

Dan di dalam Homebrew, gunakan:

  • homebrew-cask untuk menginstal versi java
  • jenv untuk mengelola versi java yang diinstal

Seperti yang terlihat di http://hanxue-it.blogspot.ch/2014/05/installing-java-8-managing-multiple.html , ini adalah langkah-langkah yang harus diikuti.

  1. pasang homebrew
  2. instal homebrew jenv
  3. pasang homebrew-tong
  4. instal versi java tertentu menggunakan tong (lihat "versi homebrew-tong" paragraf di bawah)
  5. tambahkan versi ini untuk jenv untuk mengelolanya
  6. periksa versi apakah dikelola dengan benar oleh jenv
  7. ulangi langkah 4 hingga 6 untuk setiap versi java yang Anda butuhkan

versi homebrew-tong

Tambahkan homebrew/cask-versionsketuk ke homebrew menggunakan:

brew tap homebrew/cask-versions

Kemudian Anda dapat melihat semua versi yang tersedia:

brew search java

Kemudian Anda dapat menginstal versi yang Anda sukai:

brew cask install java7
brew cask install java6

Dan menambahkannya untuk dikelola oleh jenv seperti biasa.

jenv add <javaVersionPathHere>

Saya pikir ini adalah cara terbersih & paling sederhana untuk melakukannya.


Hal penting lain yang perlu diperhatikan, seperti yang disebutkan dalam Mac OS X 10.6.7 Java Path Current JDK membingungkan :

Untuk berbagai jenis JDK atau instalasi, Anda akan memiliki jalur yang berbeda

Anda dapat memeriksa jalur versi yang diinstal menggunakan /usr/libexec/java_home -V, lihat Bagaimana cara memeriksa apakah Java JDK diinstal pada Mac?

Di Mac OS X Mavericks, saya menemukan sebagai berikut:

1) bawaan JRE bawaan: /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home

2) JDK yang diunduh dari Apple: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/

3) JDK yang diunduh dari Oracle: /Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home


Sumber daya

Adrien Be
sumber
16
Akan lebih baik untuk menyebutkan bahwa homebrew-tong dapat diinstal dengan perintah dan brew install caskroom/cask/brew-caskbukan brew install caskmerupakan plugin Emacs.
Unnawut
7
Saya mengalami beberapa masalah saat menerapkan solusi ini, salah satunya adalah dengan jenvmengembalikan No such file or directory.kesalahan. Wiki ini membantu menyelesaikannya untuk saya. github.com/gcuisinier/jenv/wiki/Trouble-Shooting
juil
10
Saya akan menambahkan bahwa semua instalasi java akan masuk /Library/Java/JavaVirtualMachines/dan ketika menambahkannya dengan jenv addAnda menambahkan path yang tampak seperti ini /Library/Java/JavaVirtualMachines/[specific-version]/Contents/Home/. Bersulang!
Nikolay Tsenkov
14
Pada 23 Juni 2017, saya menjalankan brew cask search java7tetapi mendapat No Cask ditemukan untuk "java7".
Mingliang Liu
4
@MingliangLIU ya saya juga ... benar-benar menyebalkan. Saya menemukan masalah tentang ini di Github adalah mereka menyebutkan beberapa pekerjaan di sekitar tetapi saya tidak bisa membuatnya bekerja. Jadi saya akhirnya harus melakukannya "dengan cara manual" melalui apel dan oracle "download versi Java dan pasang" halaman web. Kemudian gunakan /usr/libexec/java_home -Vuntuk memeriksa jalur di mana ini diinstal.
Adrien Be
304

Hapus instalan jdk8, instal jdk7, lalu instal ulang jdk8.

Pendekatan saya untuk beralih di antara mereka (dalam. Profil):

export JAVA_7_HOME=$(/usr/libexec/java_home -v1.7)
export JAVA_8_HOME=$(/usr/libexec/java_home -v1.8)
export JAVA_9_HOME=$(/usr/libexec/java_home -v9)

alias java7='export JAVA_HOME=$JAVA_7_HOME'
alias java8='export JAVA_HOME=$JAVA_8_HOME'
alias java9='export JAVA_HOME=$JAVA_9_HOME'

#default java8
export JAVA_HOME=$JAVA_8_HOME

Kemudian Anda cukup mengetik java7atau java8di terminal untuk beralih versi.

(edit: diperbarui untuk menambahkan peningkatan Dylans untuk Java 9)

Vegard
sumber
18
Sejauh ini ini pilihan terbaik bagi saya. dengan mudah dapat beralih ke versi apa pun hanya dengan perintah "java8" atau "java7". Terima kasih atas bantuannya
MMHMasud
4
Bagus ! :) Dan untuk yang lain seperti saya, Anda dapat menggunakan: ls / Library / Java / JavaVirtualMachines untuk melihat versi mana yang tersedia. Kemudian Anda dapat mengaktifkan berbagai versi 1.8.x. Dan Anda juga harus menambahkan export PATH = $ JAVA_HOME / bin: $ PATH
Nico
4
Terima kasih untuk yang satu ini. Saya hanya ingin menyebutkan bahwa saya sudah berhasil melakukan ini dengan menginstal jdk7 setelah jdk8 (tidak perlu menghapus jdk8).
Titus
6
Entah mengapa saya membuang-buang waktu saya dengan jenv, karena ini hanya bekerja, dan tidak mengacaukan startup shell Anda dengan 0,5s dengan jenv init.
cvakiitho
2
Jika Anda mencoba menjalankan java 9 dengan cara ini, argumen versi ke java_home untuk java 9 semestinya adalah 9misalnyaexport JAVA_9_HOME=$(/usr/libexec/java_home -v9)
Dylan Nissley
125

Untuk macOS Sierra 420

Panduan ini dibuat dari berbagai sumber (balasan di atas serta pos lainnya), dan berfungsi dengan sempurna.

0. Jika Anda belum melakukannya, instal homebrew.

Lihat https://brew.sh/

1. Instal jenv

brew install jenv

2. Tambahkan jenv ke profil bash

if which jenv > /dev/null; then eval "$(jenv init -)"; fi

3. Tambahkan jenv ke jalur Anda

export PATH="$HOME/.jenv/shims:$PATH"

4. Ketuk "kamar / versi"

FYI: "Ketuk" memperpanjang daftar repo yang tersedia buatan brew yang dapat dipasangnya, di atas dan di luar daftar default repo yang tersedia dari brew.

brew tap caskroom/versions

5. Instal versi terbaru java

brew cask install java

6. Instal java 6 (atau 7 atau 8 apa pun yang Anda butuhkan)

brew cask install java6
#brew cask install java7
#brew cask install java8

? Mungkin tutup dan mulai ulang Terminal sehingga ia melihat ada vars ENV baru yang mendapat pengaturan.

7. Tinjau Instalasi

Semua versi Java dipasang di sini: /Library/Java/JavaVirtualMachinesmari kita lihat.

ls -la /Library/Java/JavaVirtualMachines

8. Tambahkan setiap jalur ke jenv satu per satu.

Kita perlu menambahkan "/ Konten / Rumah" ke folder versi. PERINGATAN: Gunakan jalur yang sebenarnya pada mesin Anda ... ini hanya CONTOH 's

jenv add /Library/Java/JavaVirtualMachines/1.6.0___EXAMPLE___/Contents/Home
jenv add /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk___EXAMPLE___/Contents/Home

9. Periksa apakah jenv terdaftar OK

jenv versions

10. Atur versi java untuk digunakan (secara global)

Di mana XX cocok dengan salah satu item dalam daftar versi di atas.

jenv global XX

Periksa versi java

java -version

Periksa versi jenv

Harus juga menunjukkan versi saat ini sedang digunakan dengan tanda bintang.

jenv versions

DIBUAT


Referensi cepat di masa depan

Untuk mengubah versi java

... Lihat daftar versi java yang tersedia

jenv versions

... lalu, di mana XX cocok dengan item dalam daftar di atas

jenv global XX
bob
sumber
1
Selain itu, restart terminal Anda setelahbrew cask install java*
peras
1
Langkah demi langkah penjelasan yang jelas dan bagus.
Ritesh Singh
1
Kesalahan: Tong 'java8' tidak tersedia: Tidak ada tong dengan nama ini ada.
Alexey Sh.
6
java8 / 9/10 tidak tersedia lagi sebagai tong. Coba ini sebagai gantinya: "brew cask install adoptopenjdk / openjdk / adoptopenjdk8"
supi
1
brew tap caskroom/versionsseharusnyabrew tap homebrew/cask-versions
Vyacheslav Cotruta
42

SDKMAN! adalah alat yang hebat untuk menggunakan beberapa versi Java, Gradle, Groovy, Kotlin, dan alat JVM lainnya di Mac OS. Instalasi dan penggunaan dokumen jelas ada di situs utama.

(Saya tidak memiliki afiliasi, hanya pengguna yang bahagia).

Sebagai contoh penggunaan, jika saya mengetik berikut ini di jendela Terminal, ada daftar versi Java SDK yang tersedia (diedit untuk singkatnya):

$ sdk list java
Available Java Versions
   + 9ea170                                                                        
 > + 8u131                                                                         
     7u141-zulu                     

Di sini +menunjukkan bahwa versi diinstal. >menunjukkan versi mana yang sedang digunakan. Untuk menginstal versi:

$ sdk install java 7u141-zulu

Untuk menggunakan versi di jendela Terminal ini:

$ sdk use java 9ea170
Michael Easter
sumber
sdkman mendukung versi yang dimulai dengan java 1.7. Jika Anda bersedia menggunakan java 1.6, solusi ini mungkin tidak cocok untuk Anda.
Aykut Akıncı
sdkman bagus, tetapi mereka tidak mendukung rilis spesifik dalam versi. Misalnya Datastax Dev Center hanya berfungsi dengan 1.8.0_151 tapi saya tidak bisa menentukannya dengan sdkman. Semoga mereka menambahkan lebih banyak versi.
Eduardo Dennis
Jika Anda memiliki versi lokal, saya pikir Anda dapat menginstalnya ke SDKMan - sdkman.io/usage#localversion (tapi saya belum mencobanya)
Michael Easter
6

Seperti yang ditemukan di situs web ini Jadi Mari kita mulai dengan menginstal jEnv

  1. Jalankan ini di terminal

    brew install https://raw.github.com/gcuisinier/jenv/homebrew/jenv.rb
  2. Tambahkan jEnv ke profil bash

    if which jenv > /dev/null; then eval "$(jenv init -)"; fi
  3. Ketika Anda pertama kali menginstal jEnv tidak akan memiliki JDK yang terkait dengannya.

    Sebagai contoh, saya baru saja menginstal JDK 8 tetapi jEnv tidak mengetahuinya. Untuk memeriksa versi Java pada jEnv

    Saat ini hanya ditemukan versi Java (jre) pada sistem. The *menunjukkan versi yang saat ini dipilih. Tidak seperti rvm dan rbenv, jEnv tidak dapat menginstal JDK untuk Anda. Anda perlu menginstal JDK secara manual dari situs web Oracle.

  4. Instal JDK 6 dari situs web Apple. Ini akan menginstal Java di /System/Library/Java/JavaVirtualMachines/. Alasan kami menginstal Java 6 dari situs web Apple adalah bahwa SUN tidak datang dengan JDK 6 untuk MAC, jadi Apple membuat / memodifikasi versi penyebarannya sendiri.

  5. Demikian pula instal JDK7 dan JDK8.

  6. Tambahkan JDK ke jEnv.

    JDK 6:

    JDK 7: http: //javahabi@javahabit.com/wp-content/uploads/2015/03/img_5518ab9bc47d4.png

    JDK 8: http: //javahabi@javahabit.com/wp-content/uploads/2015/03/img_5518abb2c1217.png

  7. Periksa versi java yang diinstal menggunakan jenv

    http: //javahabi@javahabit.com/wp-content/uploads/2015/03/img_5518abceb0deb.png

  8. Jadi sekarang kami memiliki 3 versi Java di sistem kami. Untuk mengatur versi default gunakan perintah

    jenv local <jenv version>

    Ex - Saya ingin Jdk 1.6 memulai IntelliJ

    jenv local oracle64-1.6.0.65
  9. periksa versi java

    versi java http: //javahabi@javahabit.com/wp-content/uploads/2015/03/img_5518abe376dd0.png

Itu dia. Kami sekarang memiliki beberapa versi java dan kami dapat beralih di antara mereka dengan mudah. jEnv juga memiliki beberapa fitur lain, seperti pembungkus untuk Gradle, Ant, Maven, dll, dan kemampuan untuk mengatur opsi JVM secara global atau lokal. Lihat dokumentasi untuk informasi lebih lanjut.

Dinesh Arora
sumber
5
Jangan menaruh gambar dari perintah Anda, itu membuat sulit untuk menyalin / menempelkannya. Untuk menyorot perintah, gunakan backticks "` "untuk satu kata atau perintah pendek, atau indentasi perintah Anda dengan 4 spasi pada barisnya sendiri (atau kelipatan 4 dalam daftar).
Seki
1
Terima kasih Seki. Saya kesulitan memposting gambar dan menghabiskan waktu yang lama mencoba memformat tetapi tidak bisa memperbaikinya. Terima kasih telah berbagi info backticks.
Dinesh Arora
4
Saya pikir Anda mungkin telah menggunakan gambar yang sama empat kali.
Ellen Spertus
5

Saya menemukan manajer versi Java ini disebut Jabba baru-baru ini dan penggunaannya sangat mirip dengan manajer versi bahasa lain seperti rvm (ruby), nvm (node), pyenv (python), dll. Juga itu lintas platform sehingga pasti dapat digunakan pada Mac.

Setelah instalasi, itu akan membuat dir di ~ / .jabba untuk meletakkan semua versi Java yang Anda instal. Ini "Mendukung instalasi Oracle JDK (default) / Server JRE, Zulu OpenJDK (sejak 0.3.0), IBM SDK, Java Technology Edition (sejak 0.6.0) dan dari URL khusus.".

Penggunaan dasar terdaftar di Github mereka. Ringkasan cepat untuk memulai:

curl -sL https://github.com/shyiko/jabba/raw/master/install.sh | bash && . ~/.jabba/jabba.sh

# install Oracle JDK
jabba install 1.8 # "jabba use 1.8" will be called automatically  
jabba install 1.7 # "jabba use 1.7" will be called automatically 

# list all installed JDK's
jabba ls

# switch to a different version of JDK
jabba use 1.8
York Yang
sumber
4

Saya menggunakan Mac OS X 10.9.5. Ini adalah bagaimana saya mengelola beberapa JDK / JRE di komputer saya ketika saya membutuhkan satu versi untuk menjalankan aplikasi A dan menggunakan versi lain untuk aplikasi B.

Saya membuat skrip berikut setelah mendapatkan bantuan online.

#!bin/sh
function setjdk() {
  if [ $# -ne 0 ]; then
   removeFromPath '/Library/Java/JavaVirtualMachines/'
   if [ -n "${JAVA_HOME+x}" ]; then
    removeFromPath $JAVA_HOME
   fi
   export JAVA_HOME=/Library/Java/JavaVirtualMachines/$1/Contents/Home
   export PATH=$JAVA_HOME/bin:$PATH
  fi
 }
 function removeFromPath() {
  export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;")
 }
#setjdk jdk1.8.0_60.jdk
setjdk jdk1.7.0_15.jdk

Saya meletakkan skrip di atas dalam file profil. Cukup buka terminal, ketik vi .profile, tambahkan skrip dengan potongan di atas dan simpan. Setelah jenis Anda keluar source .profile, ini akan menjalankan skrip profil Anda tanpa Anda harus me-restart terminal. Sekarang ketik java -versionitu harus menunjukkan 1,7 sebagai versi Anda saat ini. Jika Anda berniat mengubahnya ke 1.8 maka komentari baris setjdk jdk1.7.0_15.jdkdan batalkan komentar pada baris tersebut setjdk jdk1.8.0_60.jdk. Simpan skrip dan jalankan kembali dengan perintah sumber. Saya menggunakan mekanisme ini untuk mengelola beberapa versi JDK / JRE ketika saya harus mengkompilasi 2 proyek Maven yang berbeda yang membutuhkan versi java yang berbeda.

ChaitanyaBhatt
sumber
3

Jenv di Mac Sierra:

jika tidak berfungsi setelah menginstal, lakukan perbaikan bug ini untuk menambahkan java executable ke path

export PATH="$HOME/.jenv/shims:$PATH"

meskipun eval "$(jenv init -)"bisa melakukan pekerjaan ini. Alasannya adalah / folder bin tidak ada lagi seperti yang dijelaskan di beranda itu, tetapi folder shim digunakan sebagai / bin sebagai gantinya.

  • Pastikan ~ / .jenv ada di sana
  • which java dapat mencetak / Perpustakaan / ...
  • jenv global 1.8
  • shell jenv 1.8

Akhirnya, which javamemberi Anda:

/ Pengguna / XXX/.jenv/shims/java

Petani kode
sumber
3

Dengan semangat yang sama dari @Vegard (ringan):

  • Instal JDK yang diinginkan dengan Homebrew
  • Masukkan jdkfungsi bash ini dan default pada Anda.profile

    jdk() {
        version=$1
        export JAVA_HOME=$(/usr/libexec/java_home -v"$version");
        java -version
     }
    
    export JAVA_HOME=$(/usr/libexec/java_home -v11); # Your default version
  • dan kemudian, untuk mengganti jdk Anda, Anda bisa melakukannya

     jdk 9
     jdk 11
     jdk 13

Berdasarkan https://github.com/AdoptOpenJDK/homebrew-openjdk .

hulius
sumber
0

Ini versi lebih kering untuk bash (Berdasarkan jawaban Vegard)

Ganti 1.7 dan 1.8 dengan versi apa pun yang Anda minati dan Anda akan mendapatkan alias yang disebut 'javaX'; di mana 'X' adalah versi java (7/8 dalam cuplikan di bawah) yang akan memungkinkan Anda untuk dengan mudah beralih versi

for version in 1.7 1.8; do
    v="${version: -1}"
    h=JAVA_"$v"_HOME

    export "$h"=$(/usr/libexec/java_home -v $version)

    alias "java$v"="export JAVA_HOME=\$$h"
done
elad.chen
sumber
0

Untuk menginstal versi OpenJDK yang lebih baru, saya menggunakan ini. Contoh untuk OpenJDK 14:

brew info adoptopenjdk
brew tap adoptopenjdk/openjdk
brew cask install adoptopenjdk14

Lihat https://github.com/AdoptOpenJDK/homebrew-openjdk untuk info terkini.

Matthias Bohlen
sumber