Bagaimana cara saya beralih antara Java 7 dan Java 6 pada OS X 10.8.2?

84

Saya menggunakan Java SE 7 untuk memprogram game sederhana untuk windows dan mac, tetapi saya harus beralih ke java 6 untuk menjalankan game seperti Minecraft di komputer saya. Ini digunakan untuk bekerja dengan baik sebelum saya memperbarui ke Mac OS X 10.8.2 Build 12C60.

Sebelum pembaruan ini, saya dulu bisa membuka Java Preferences dan mengecek Java 6 atau Java 7. Tapi sekarang saya sepertinya tidak bisa menemukan Java Preferences.

Saya menjalankan OS X 10.8.2 (versi terbaru).

Nikita Jerschow
sumber
3
Anda benar, Preferensi Java sekarang dihapus dengan pembaruan terakhir. Beberapa metode shell yang saya coba tidak berhasil, tetapi harus ada beberapa mekanisme untuk memfasilitasi ini ketika Anda menjalankan 7 terbaru juga.
ylluminate

Jawaban:

41

Saya tidak berpikir itu mungkin untuk beralih JRE (lingkungan runtime) lihat di sini:

http://docs.oracle.com/javase/7/docs/webnotes/install/mac/mac-jre.html

yang menyatakan:

Hanya satu JRE yang dapat diinstal. Menginstal JRE menghapus JRE yang sebelumnya diinstal. Versi JRE yang digunakan oleh sistem dapat ditentukan dalam satu dari dua cara:

Penanganan masalah:

Saya memiliki masalah yang sama seperti yang Anda miliki dengan Minecraft dengan Wuala. Di mana saya perlu menjalankan Wuala menggunakan Java 1.6 sementara saya perlu mengembangkan dengan JDK 1.7 dan saya mengelola ini dengan membuka paket Wuala.app dan mengubah skrip startupnya di:

/Applications/Wuala.app/Contents/MacOS/wuala

dari:

exec java ${VMARGS} -cp "${JAR_DIR}/loader3.jar":/System/Library/Java/ com.wuala.loader3.Loader3 -alternateprogrampath "${JAR_DIR}" -installed $*

untuk:

/usr/libexec/java_home -v 1.6.0 --exec java ${VMARGS} -cp "${JAR_DIR}/loader3.jar":/System/Library/Java/ com.wuala.loader3.Loader3 -alternateprogrampath "${JAR_DIR}" -installed $*

Yaitu hanya mengganti: execdengan:/usr/libexec/java_home -v 1.6.0 --exec

Ini tentu saja agak terlibat dan akan rusak setiap kali wuala autoupdates tetapi jika tidak berfungsi.

Untuk menggunakan JDK lain, lihat di sini:

http://docs.oracle.com/javase/7/docs/webnotes/install/mac/mac-jdk.html

yang menyatakan:

Untuk menjalankan versi Java yang berbeda, tentukan path lengkap, atau gunakan alat java_home: /usr/libexec/java_home -v 1.7.0_06 --exec javac -version

Berikut ini adalah ilustrasi dan contoh dari pengaturan saya:

Oracle JDK menginstal:

odin:~ geff$ ls -al /Library/Java/JavaVirtualMachines 
total 0
21058660 0 drwxr-xr-x  3 root  wheel  - 102 24 Oct 18:04:33 2012 jdk1.7.0_09.jdk/
21061692 0 drwxr-xr-x  3 root  wheel  - 102 24 Oct 18:06:08 2012 jdk1.7.0_07.jdk/
21042328 0 drwxrwxr-x  3 root  wheel  - 102 20 Apr 06:58:53 2012 1.7.0.jdk/
21031664 0 drwxrwxr-x  7 root  admin  - 238 24 Oct 18:04:16 2012 ../
21042327 0 drwxr-xr-x  5 root  wheel  - 170 24 Oct 18:06:13 2012 ./

Apple memasok JDK:

odin:~ geff$ ls -al /System/Library/Java/JavaVirtualMachines 
total 0
21026468 0 drwxr-xr-x  3 root  wheel  - 102  1 Nov 17:49:02 2011 1.6.0.jdk/
21026436 0 drwxr-xr-x  6 root  wheel  - 204 24 Mar 23:04:06 2012 ../
21026467 0 drwxr-xr-x  3 root  wheel  - 102  1 Nov 17:49:02 2011 ./

Ini berfungsi bagi saya juga untuk menggunakan Apple yang disediakan 1,6 JDK

odin:~ geff$ /usr/libexec/java_home -v 1.6.0_37 --exec java -version
java version "1.6.0_37"
Java(TM) SE Runtime Environment (build 1.6.0_37-b06-434-11M3909)
Java HotSpot(TM) 64-Bit Server VM (build 20.12-b01-434, mixed mode)

Pilih antara versi 1.7 Oracle:

Memilih Oracle JDK 1.7.0_04 pertama

odin:~ geff$ /usr/libexec/java_home -v 1.7.0_04 --exec java -version
java version "1.7.0_04"
Java(TM) SE Runtime Environment (build 1.7.0_04-b21)
Java HotSpot(TM) 64-Bit Server VM (build 23.0-b21, mixed mode)

Memilih JDK 1.7.0_07

odin:~ geff$ /usr/libexec/java_home -v 1.7.0_07 --exec java -version
java version "1.7.0_07"
Java(TM) SE Runtime Environment (build 1.7.0_07-b10)
Java HotSpot(TM) 64-Bit Server VM (build 23.3-b01, mixed mode)

JDK default adalah yang tertinggi:

odin:~ geff$ java -version
java version "1.7.0_09"
Java(TM) SE Runtime Environment (build 1.7.0_09-b05)
Java HotSpot(TM) 64-Bit Server VM (build 23.5-b02, mixed mode)

Default ke level tambalan "tertinggi ketika hanya menggunakan nomor versi minor:

odin:~ geff$ /usr/libexec/java_home -v 1.7.0 --exec java -version
java version "1.7.0_09"
Java(TM) SE Runtime Environment (build 1.7.0_09-b05)
Java HotSpot(TM) 64-Bit Server VM (build 23.5-b02, mixed mode)
Geff
sumber
99

Seseorang dapat menggunakan java_homemekanisme dengan lebih nyaman.

Katakanlah Anda memiliki Java 7 sebagai default:

$ java -version
java version "1.7.0_15" 
…

Sekarang mari kita aktifkan Java 6:

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

Dan itu dia:

$ java -version
java version "1.6.0_41"
…

Saya menambahkan ini ke saya .bashrcuntuk membuat segalanya lebih nyaman:

alias java_ls='/usr/libexec/java_home -V 2>&1 | grep -E "\d.\d.\d[,_]" | cut -d , -f 1 | colrm 1 4 | grep -v Home'

function java_use() {
    export JAVA_HOME=$(/usr/libexec/java_home -v $1)
    export PATH=$JAVA_HOME/bin:$PATH
    java -version
}

java_lsmengurangi output java_home -Vmenjadi hanya nomor versi. Dan java_usehanyalah jalan pintas untuk apa yang kami lakukan di atas. Misal java_use 1.6akan beralih ke Java 6.

Alex
sumber
3
di java_use Anda harus menghapus java sebelumnya dari $ PATH.
Eir Nym
@ EirNym bagaimana orang melakukan itu?
Malcolm
sesuatu yang saya temukan berguna untuk menghapus java sebelumnya dari $ PATH stackoverflow.com/a/370192/1503859
Nitin Mahesh
perbarui java_use yang berfungsi untuk saya: function java_use () {export JAVA_HOME = $ (/ usr / libexec / java_home -v $ 1) ekspor PATH = echo $PATH | awk -v RS=: -v ORS=: '/Library\/Java\/JavaVirtualMachines/ {next} {print}'| sed 's/:$//' ekspor PATH = $ JAVA_HOME / bin: $ PATH java -version}
Nitin Mahesh
35

Solusi untuk mengganti JDK dengan mudah (tidak yakin tentang JRE) ( sumber ):

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  
  echo JAVA_HOME set to $JAVA_HOME  
  java -version  
 }  
 function removeFromPath() {  
  export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;")  
 }

(tambahkan fungsi di atas ke Anda .bash_profile)

Pemakaian:

$ setjdk 1.7
Neeme Praks
sumber
7

Solusi cepat adalah membuat symlink ke biner Java 6 lama:

sudo ln -s /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Commands/java /usr/local/bin/java6

Kemudian jalankan aplikasinya dengan: java6 -jar myapp.jar

stephendv
sumber
3

Aplikasi preferensi Java tampaknya tidak lagi mencantumkan Java 1.6. Namun ketika saya memeriksa versi java di baris perintah saya mendapatkan:

java -version                                            
java version "1.6.0_37"
Java(TM) SE Runtime Environment (build 1.6.0_37-b06-434-11M3909)
Java HotSpot(TM) 64-Bit Server VM (build 20.12-b01-434, mixed mode)
arlogb
sumber
3

Cukup mudah untuk mengganti versi Java secara instan pada OS X tanpa perlu mengubah variabel $ JAVA_HOME.

Saya menjalankan 10.8.2, dan variabel $ JAVA_HOME saya menunjuk ke / Library / Java / Home

echo $JAVA_HOME

Path ini adalah tautan simbolik, seperti yang dapat dilihat dengan menjalankan perintah ls -l

ls -la /Library/Java

Tautan simbolik default menunjuk ke

Beranda -> /Library/Java/JavaVirtualMachines/1.6.0_33-b03-424.jdk/Contents/Home/

Untuk mengalihkan java ke instalasi 1.7 saya, saya hanya mengganti symlink Home lama dengan symlink baru yang menunjuk ke direktori home instalasi Java 1.7 saya.

cd /Library/Java
mv Home Home-1.6
ln -s /Library/Java/JavaVirtualMachines/jdk1.7.0_21.jdk/Contents/Home/ Home

Dan voila! java -versi menunjukkan bahwa saya sekarang menjalankan java 1.7. Alihkan saja symlink mana yang sekarang bernama 'Home' untuk secara instan mengubah java JRE default.

supershnee
sumber
3

Berikut adalah cara mudah untuk beralih java 6 dan java 7 di mac osx.

langkah 1: unduh jdk 7 dari situs web resmi oracle http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html dan instal langkah demi langkah ikuti tipnya.

langkah 2: atur $ JAVA_HOME di .bash_profile

$ vim .bash_profile 

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

$ source .bash_profile

$ echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home

langkah 3: jika Anda ingin menggunakan jdk 6, cukup alternatif $ JAVA_HOME ke jalur rumah jdk 6

$ vim .bash_profile 

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

$ source .bash_profile

$ echo $JAVA_HOME
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
caiying
sumber
3

Kelola Lingkungan Java Anda (di Mac dan Linux): http://www.jenv.be/

Mirip dengan RVM untuk Ruby dan N untuk Node tetapi untuk Java.

Misha Reyzlin
sumber
2

Berdasarkan hal di atas dan sedikit penelitian lain, saya telah menyusun skrip yang dapat Anda "sumber" (atau "titik") ke dalam profil Anda. Ini akan meminta Anda dengan menu JAVA_HOME yang tersedia di Mac Anda, meskipun Anda juga dapat menentukan rumah bawaan, atau memilih dulu pilihan menu.

Di saya .bash_profile:

export PREJAVA_PATH="$PATH:~/bin"
export PATH="${PREJAVA_PATH}"
. gojava -d

Perhatikan itu membutuhkan variabel PREJAVA_PATH. Anda juga dapat memanggilnya dari baris perintah:

$ . gojava

Atau untuk pra-pilih opsi kedua:

$ . gojava -c 2

File gojavaadalah:

#!/bin/bash

_exe=/usr/libexec/java_home
_defaultHome=$($_exe)

usage() {
cat <<EOF
$0 [-d] [-c menu_choice]

Sets JAVA_HOME and PATH variables based on a user choice from a menu of available JDKs.

Parameters:

  -d : use system default ($_defaultHome)
  -c : specify a menu choice in advance, without being prompted

Note that environment variable PREJAVA_PATH must be set, and should include the PATH that 
you want with everything but JAVA_HOME/bin.

EOF
exit 1
}

setHomePath() {
  export JAVA_HOME="$1"
  export PATH="${JAVA_HOME}/bin":"${PREPATH}"
}

# TODO: [enhancement] figure out a better way to determine a PATH that excludes the JAVA_HOME
if [ -z "${PREJAVA_PATH}" ]; then
  usage  
else
  PREPATH=${PREJAVA_PATH}
fi

_default=0
_choice=0
OPTIND=1
while getopts "dc:" name; do
 case $name in
      d) _default=1 ;;
      c) _choice="$OPTARG" ;;
      *) echo "unknown parameter $name"
         usage
         ;;
 esac
done

if [ $_default -eq 1 ]; then
  setHomePath "$_defaultHome"
else
  i=1
  while read -r line; do
    choiceList[$i]="$line"
    homeList[$i]=$(echo $line | sed 's/[^\/]*\(\/.*\)/\1/')
    i=$(($i+1))
  done < <($_exe -V 2>&1 | egrep -v '^$|^\/|^Matching')

  if [ $_choice -gt 0 -a $_choice -lt $i ]; then
    setHomePath "${homeList[$_choice]}"
  else
    printf "\nList of available Java versions:\n"
    select choice in "${choiceList[@]}"; do
      if [ $REPLY -gt 0 -a $REPLY -lt $i ]; then
        setHomePath "${homeList[$REPLY]}"
        break
      fi
    done
  fi
fi
Phil
sumber
0

Versi kulit ikan dari jawaban alex (tambahkan ke ~/config/fish/config.fish):

alias java_ls '/usr/libexec/java_home -V 2>&1 | grep -E "\d.\d.\d[,_]" | cut -d , -f 1 | colrm 1 4 | grep -v Home'

function java_use
    set JAVA_HOME (/usr/libexec/java_home -v $argv)
    set PATH $JAVA_HOME/bin $PATH
    java -version
end
langit-langit
sumber