題 如何在OS X 10.8.2上切換Java 7和Java 6?


我正在使用Java SE 7為windows和mac編寫簡單的遊戲,但我必須切換到java 6才能在我的計算機上運行Minecraft等遊戲。在我更新到Mac OS X 10.8.2 Build 12C60之前,這曾經工作得很好。

在此更新之前,我曾經能夠打開Java Preferences並檢查Java 6或Java 7.但是現在我似乎無法找到Java Preferences。

我正在運行OS X 10.8.2(最新版本)。


82
2017-10-20 21:36


起源


您是對的,現在使用上次更新刪除了Java首選項。我嘗試過的一些不同的shell方法都沒有用,但是當你運行最近的7時,必須有一些機制來促進這個。 - ylluminate


答案:


我不認為切換JRE(運行時環境)可以看到這裡:

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

其中說明:

只能安裝一個JRE。安裝JRE會刪除以前的版本   安裝了JRE。可以確定係統使用的JRE版本   有兩種方式之一:

解決方法:

我遇到了類似的問題,就像你和Mineala一起使用Wuala一樣。 我需要使用Java 1.6運行Wuala,而我需要使用JDK 1.7進行開發,我通過打開Wuala.app包並更改其啟動腳本來管理:

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

從:

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

至:

/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 $*

即簡單地替換: exec 有: /usr/libexec/java_home -v 1.6.0 --exec

這當然是相當複雜的,並且每次wuala自動更新時都會被破壞,但否則它會起作用。

要使用另一個JDK,請參見此處:

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

其中說明:

要運行不同版本的Java,請指定完整路徑,或使用java_home工具:        /usr/libexec/java_home -v 1.7.0_06 --exec javac -version

以下是我的設置中的插圖和示例:

Oracle JDK安裝:

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提供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 ./

這對我來說也適用於Apple提供的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)

在1.7 Oracle版本中進行選擇:

選擇第一個Oracle JDK 1.7.0_04

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)

選擇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是最高的一個:

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)

僅使用次要版本號時,默認為最高“補丁級別:

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)

41
2017-10-24 17:40





一個人可以使用 java_home 機制更方便。

假設您將Java 7作為默認值:

$ java -version
java version "1.7.0_15" 
…

現在讓我們激活Java 6:

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

它是:

$ java -version
java version "1.6.0_41"
…

我把這些添加到我的 .bashrc 為了使事情更方便:

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_ls 減少了輸出 java_home -V 只是版本號。和 java_use 只是我們上面所做的捷徑。例如。 java_use 1.6 將切換到Java 6。


98
2018-02-22 12:26



在java_use中,您應該從$ PATH中刪除以前的java。 - Eir Nym
@EirNym怎麼會這樣做? - Malcolm
我覺得有用的東西可以從$ PATH中刪除以前的java stackoverflow.com/a/370192/1503859 - Nitin Mahesh
更新對我有用的java_use:function java_use(){export JAVA_HOME = $(/ usr / libexec / java_home -v $ 1)export PATH =echo $PATH | awk -v RS=: -v ORS=: '/Library\/Java\/JavaVirtualMachines/ {next} {print}'| sed 's/:$//'     export PATH = $ JAVA_HOME / bin:$ PATH java -version} - Nitin Mahesh


輕鬆切換JDK的解決方案(不確定JRE)(資源):

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:?;;")  
 }

(將以上功能添加到您的 .bash_profile

用法:

$ setjdk 1.7

35
2018-03-18 22:53





一個快速的解決方法是創建舊Java 6二進製文件的符號鏈接:

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

然後使用以下命令運行應用程序:java6 -jar myapp.jar


7
2017-10-23 09:02





Java首選項應用程序似乎不再列出Java 1.6。但是,當我在命令行中檢查java版本時,我得到:

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)

3
2017-10-21 14:58





在OS X上立即切換Java版本非常簡單,無需更改$ JAVA_HOME變量。

我正在運行10.8.2,我的$ JAVA_HOME變量指向/ Library / Java / Home

echo $JAVA_HOME

此路徑是一個符號鏈接,可以通過運行ls -l命令看到

ls -la /Library/Java

默認的符號鏈接指向

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

要將java重定向到我的1.7安裝,我只需用指向我的Java 1.7安裝的主目錄的新符號鏈接替換舊的Home符號鏈接。

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

瞧! java -version顯示我現在正在運行java 1.7。只需切換哪個符號鏈接當前名為“Home”即可立即更改默認的Java JRE。


3
2018-05-16 22:11





這是在mac osx上切換java 6和java 7的簡單方法。

第1步:從oracle官方網站下載jdk 7 http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html  然後按照提示逐步安裝。

第2步:在.bash_profile中設置$ JAVA_HOME

$ 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

第3步:如果你想使用jdk 6,只需替代$ JAVA_HOME到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

3
2017-11-12 10:15





管理Java環境(在Mac和Linux上): http://www.jenv.be/

類似於Ruby的RVM和Node的N,但是Java。


3
2018-06-10 17:02





基於以上和其他一些研究,我設計了一個腳本,你可以“源”(或“點”)到你的個人資料。它會在Mac上提供可用的JAVA_HOME菜單,但您也可以指定默認主頁,或預先選擇菜單選項。

在我的 .bash_profile

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

注意它需要一個變量 PREJAVA_PATH。您也可以從命令行調用它:

$ . gojava

或預先選擇第二個選項:

$ . gojava -c 2

文件 gojava 是:

#!/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

2
2018-02-21 14:32





@alex的Fish shell版本答案(添加到 ~/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

0
2018-03-12 13:10