OS X 10.8.2에서 Java 7과 Java 6 간을 전환하려면 어떻게합니까?


84

Java SE 7을 사용하여 Windows 및 Mac 용 간단한 게임을 프로그래밍하고 있지만 컴퓨터에서 Minecraft와 같은 게임을 실행하려면 java 6으로 전환해야합니다. Mac OS X 10.8.2 빌드 12C60으로 업데이트하기 전에 제대로 작동했습니다.

이 업데이트 이전에는 Java 기본 설정을 열고 Java 6 또는 Java 7을 확인할 수 있었지만 이제는 Java 기본 설정을 찾을 수없는 것 같습니다.

OS X 10.8.2 (최신 버전)를 실행하고 있습니다.


3
맞습니다. Java 환경 설정이 이제 마지막 업데이트에서 제거되었습니다. 내가 시도한 다양한 셸 방법은 효과가 없지만 가장 최근 7을 실행할 때 이것을 용이하게하는 메커니즘이 있어야합니다.
ylluminate

답변:


41

JRE (런타임 환경)를 전환 할 수 없다고 생각합니다.

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

어느 상태 :

하나의 JRE 만 설치할 수 있습니다. JRE를 설치하면 이전에 설치된 JRE가 제거됩니다. 시스템에서 사용하는 JRE 버전은 다음 두 가지 방법 중 하나로 결정될 수 있습니다.

해결 방법 :

Wuala와 함께 Minecraft와 비슷한 문제가있었습니다. 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를 제거해야합니다.
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

35

JDK를 쉽게 전환하기위한 솔루션 (JRE에 대해 확실하지 않음) ( source ) :

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

기본 심볼릭 링크는

홈-> / 라이브러리 /Java/JavaVirtualMachines/1.6.0_33-b03-424.jdk/Contents/Home/

Java를 1.7 설치로 리디렉션하려면 이전 홈 symlink를 Java 1.7 설치의 홈 디렉토리를 가리키는 새 symlink로 바꾸십시오.

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을 실행하고 있음을 보여줍니다. 기본 java JRE를 즉시 변경하려면 현재 'Home'으로 이름 지정된 symlink를 전환하십시오.


3

다음은 mac OSX에서 Java 6 및 Java 7을 전환하는 쉬운 방법입니다.

1 단계 : oracle 공식 웹 사이트 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 to 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


2

위의 내용과 다른 연구를 바탕으로 프로필에 "소스"(또는 "점") 할 수있는 스크립트를 고안했습니다. 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

0

@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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.