macos – OS X 10.8.2でJava 7とJava 6を切り替えるには?

java macos osx-mountain-lion

私は、Windowsとmacで簡単なゲームをプログラムするためにJava SE 7を使用していますが、私のコンピュータでMinecraftなどのゲームを実行するためにJava 6に切り替えなければなりません。これは私がMac OS X 10.8.2 Build 12C60に更新する前にちょうどうまく動作していました

今回のアップデート以前は、Java環境設定を開いて、Java 6やJava 7をチェックオフにすることができました。しかし、今はJava環境設定を見つけることができないようです

私はOS X 10.8.2(最新版)を実行しています

  84  Nikita Jerschow  2012-10-20


ベストアンサー

JRE(実行環境)の切り替えはできないと思いますが、こちらを参照してください

JRE 7 Mac Install

which states:

インストールできるJREは1つだけです。JREをインストールすると、以前にインストールされたJREが削除されます。システムで使用されているJREのバージョンは、2つの方法のいずれかで判断できます

Workaround:

私もあなたと同じような問題がマインクラフトでWualaで発生しました。Java 1.6を使ってWualaを実行する必要がありましたが、JDK 1.7で開発する必要があったので、Wuala.appパッケージを開いて起動スクリプトを変更しました

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

from:

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

to:

/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を使用するにはこちらを参照してください

JDK 7 Mac Install

which states:

異なるバージョンの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  Geff  2012-10-24


一つは、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_lsjava_home -Vの出力をバージョン番号だけに減らします。そして、java_useは上でやったことのショートカットです。例えば、java_use 1.6はJava 6に切り替えます

100  Alex  2013-02-22


JDK を簡単に切り替えるためのソリューション (JRE については不明) で、6 と 7 だけでなく、どの JDK バージョンでも動作します (source)

Bashシェルでは、この関数を.bash_profileに追加します

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

魚の殻、この関数を~/.config/fish/functions/setjdk.fishとして保存します

function setjdk
if [ (count $argv) -ne 0 ]
set -x PATH (string match -v /System/Library/Frameworks/JavaVM.framework/Home/bin $PATH)
if [ -n "$JAVA_HOME" ]
set -x PATH (string match -v $JAVA_HOME $PATH)
end
set -x JAVA_HOME (/usr/libexec/java_home -v $argv)
set -x PATH $JAVA_HOME/bin $PATH
echo JAVA_HOME set to $JAVA_HOME
java -version
end
end

Usage:

$ setjdk 1.7

35  Neeme Praks  2013-03-18


手っ取り早い回避策は、古いJava 6バイナリへのシンボリックリンクを作成することです

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

次に、次のようにしてアプリを実行します

7  stephendv  2012-10-23


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  arlogb  2012-10-21


OS X上で$JAVA_HOME変数を変更することなく、Javaのバージョンを瞬時に切り替えることができます

私は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/コンテンツ/ホーム/

javaを1.7インストールにリダイレクトするために、古いHomeシンボリックリンクを、Java 1.7インストールのホームディレクトリを指す新しいシンボリックリンクに置き換えるだけです

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  supershnee  2013-05-16


ここでは、mac osxでjava 6とjava 7を切り替える簡単な方法を紹介します

ステップ1:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.htmlからjdk 7をダウンロードして、ステップバイステップでインストールしてください

ステップ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  caiying  2013-11-12


Java環境を管理する(MacとLinuxで)。http://www.jenv.be/

Ruby用のRVMとNode用のNに似ていますが、Java用です

3  Misha Reyzlin  2014-06-10


上記と他の研究に基づいて、あなたのプロフィールに “ソース”(または “ドット”)を入力できるスクリプトを考案しました。これはあなたの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  Phil  2014-02-21


魚貝版@alexの回答(~/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  ceilfors  2016-03-12


タイトルとURLをコピーしました