OS X 10.8.2でJava 7とJava 6を切り替えるにはどうすればよいですか?


84

Java SE 7を使用してWindowsおよびMac用のシンプルなゲームをプログラムしていますが、コンピューターでMinecraftなどのゲームを実行するには、Java 6に切り替える必要があります。これは、Mac OS X 10.8.2 Build 12C60にアップデートする前は正常に機能していました。

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

OS X 10.8.2(最新バージョン)を実行しています。


3
正しいです。JavaPreferencesは最後の更新で削除されました。私が試したいくつかのさまざまなシェルメソッドは解決していませんが、最新の7を実行しているときにこれを容易にするメカニズムが必要です。
イルミナート

回答:


41

JRE(ランタイム環境)を切り替えることはできないと思います。こちらをご覧ください。

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

どの州:

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

回避策:

Minecraft with 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)

99

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に切り替わります。


3
java_useでは、$ PATHから以前のjavaを削除する必要があります。
エアニム14

@EirNymどうやってやるの?
マルコム

私が$ PATHのから以前のJavaを除去するのに有用であることが判明何かstackoverflow.com/a/370192/1503859
ニティン・マヘシュ

私のために働いた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

35

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

7

簡単な回避策は、古いJava 6バイナリへのシンボリックリンクを作成することです。

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

次に、java6 -jar myapp.jarでアプリを実行します


3

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

$ JAVA_HOME変数を変更する必要なく、OS Xで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/Contents/Home/

Javaを1.7インストールにリダイレクトするには、古いホームシンボリックリンクを、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

Mac OSXでJava 6とJava 7を切り替える簡単な方法を次に示します。

ステップ1:オラクルの公式Webサイト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を使用する場合は、jdk 6のホームパスの代わりに$ JAVA_HOMEを使用します

$ 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


2

上記およびその他の調査に基づいて、プロファイルに「ソース」(または「ドット」)できるスクリプトを考案しました。Macで使用可能なJAVA_HOMEのメニューが表示されますが、デフォルトのホームを指定したり、メニューの選択肢を事前に選択したりすることもできます。

私の.bash_profile

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

変数が必要ですPREJAVA_PATH。コマンドラインから呼び出すこともできます:

$ . gojava

または、2番目のオプションを事前に選択するには:

$ . 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

0

@alex回答のFishシェルバージョン(に追加~/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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.