मैं ओएस एक्स 10.8.2 पर जावा 7 और जावा 6 के बीच कैसे स्विच कर सकता हूं?


84

मैं विंडोज़ और मैक के लिए सरल गेम को प्रोग्राम करने के लिए जावा एसई 7 का उपयोग कर रहा हूं, लेकिन मुझे अपने कंप्यूटर पर Minecraft जैसे गेम चलाने के लिए जावा 6 पर स्विच करना होगा। मैक ओएस एक्स 10.8.2 बिल्ड 12 सी 60 को अपडेट करने से पहले यह ठीक काम करता था।

इस अद्यतन से पहले मैं जावा प्राथमिकताएँ खोलने और जावा 6 या जावा 7 को चेक करने में सक्षम हुआ करता था। लेकिन अब मुझे जावा वरीयताएँ नहीं मिल पा रही हैं।

मैं OS X 10.8.2 (नवीनतम संस्करण) चला रहा हूं।


3
आप सही हैं, जावा प्राथमिकताएं अब अंतिम अपडेट के साथ हटा दी गई हैं। मैंने जिन कुछ शेल तरीकों की कोशिश की है, वे काम नहीं कर रहे हैं, लेकिन जब आप सबसे हाल ही में 7 के रूप में अच्छी तरह से चला रहे हैं, तो इसे सुविधाजनक बनाने के लिए कुछ तंत्र होना चाहिए।
२०

जवाबों:


41

मुझे नहीं लगता कि JRE (रनटाइम वातावरण) को यहां देखना संभव है:

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

कौन सा राज्य:

केवल एक JRE स्थापित किया जा सकता है। JRE को स्थापित करने से पहले से स्थापित JRE को हटा दिया जाता है। सिस्टम द्वारा उपयोग किया जाने वाला JRE संस्करण दो तरीकों में से एक में निर्धारित किया जा सकता है:

युक्ति:

आपको वैसा ही Minecraft के साथ Wuala के साथ एक समान समस्या थी। जहाँ मुझे Wuala को जावा 1.6 का उपयोग करके चलाने की आवश्यकता थी, जबकि मुझे 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 autoupdates टूट जाएगा, लेकिन अन्यथा यह काम करता है।

दूसरे JDK का उपयोग करने के लिए यहां देखें:

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

कौन सा राज्य:

जावा का एक अलग संस्करण चलाने के लिए, या तो पूर्ण पथ निर्दिष्ट करें, या 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)

98

एक java_homeतंत्र का उपयोग अधिक आसानी से कर सकता है।

मान लें कि आपके पास जावा 7 डिफ़ॉल्ट है:

$ java -version
java version "1.7.0_15" 
…

अब जावा 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जावा 6 पर जाएगा।


3
java_use में आपको $ PATH से पिछले जावा को निकालना चाहिए।
Eir Nym

@EirNym कोई ऐसा कैसे करेगा?
मैल्कम

कुछ मुझे $ PATH stackoverflow.com/
नितिन महेश

मेरे लिए काम करने वाले java_use को अपडेट करें: फ़ंक्शन java_use () {निर्यात JAVA_HOME = $ (/ usr / libexec / java_home -v $ 1) निर्यात पाथ = echo $PATH | awk -v RS=: -v ORS=: '/Library\/Java\/JavaVirtualMachines/ {next} {print}'| sed 's/:$//' निर्यात पाथ = = JAVA_HOME / बिन: $ PATH जावा -विसर्जन}
नितिन महेश

35

जेडीके (जेआरई के बारे में निश्चित नहीं) को आसानी से हल करने का एक उपाय ( स्रोत ):

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

एक त्वरित वर्कअराउंड पुराने जावा 6 बाइनरी के लिए एक सिमलिंक बनाना है:

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

फिर के साथ एप्लिकेशन चलाएं: java6 -jar myapp.jar


3

जावा वरीयताएँ ऐप जावा 1.6 को अब सूचीबद्ध नहीं करता है। हालाँकि जब मैं कमांड लाइन में जावा संस्करण की जाँच करता हूँ तो मुझे यह मिलता है:

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 पर तुरंत जावा संस्करणों को स्विच करना बहुत सरल है।

मैं 10.8.2 चला रहा हूं, और मेरे $ JAVA_HOME चर अंक / लाइब्रेरी / जावा / होम पर

echo $JAVA_HOME

यह पथ एक प्रतीकात्मक कड़ी है, जैसा कि ls -l कमांड को चलाकर देखा जा सकता है

ls -la /Library/Java

डिफ़ॉल्ट प्रतीकात्मक लिंक को इंगित करता है

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

अपने 1.7 इंस्टालेशन में जावा को रिडायरेक्ट करने के लिए, मैं केवल अपने जावा 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 चला रहा हूँ। बस स्विच करें जो वर्तमान में डिफ़ॉल्ट जावा JRE को तुरंत बदलने के लिए सिमलिंक का नाम 'होम' है।


3

यहाँ मैक ओएसएक्स पर जावा 6 और जावा 7 को स्विच करने का एक आसान तरीका है।

चरण 1: ordacle की आधिकारिक वेबसाइट http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html से jdk 7 डाउनलोड करें और इसे स्टेप बाय स्टेप फॉलो करें।

चरण 2: $ JAVA_HOME को .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

चरण 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

अपने जावा पर्यावरण (मैक और लिनक्स पर) प्रबंधित करें: http://www.jenv.be/

रूबी के लिए आरवीएम और एन के लिए एन के समान लेकिन जावा के लिए।


2

उपरोक्त और कुछ अन्य शोधों के आधार पर, मैंने एक स्क्रिप्ट तैयार की है जिसे आप अपनी प्रोफाइल में "स्रोत" (या "डॉट") कर सकते हैं। यह आपके मैक पर उपलब्ध JAVA_HOMEs के मेनू के साथ आपको संकेत देगा, हालांकि आप डिफ़ॉल्ट घर भी निर्दिष्ट कर सकते हैं, या मेनू विकल्प का चयन कर सकते हैं।

मेरे में .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 उत्तर का मछली खोल संस्करण (इसमें जोड़ें ~/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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.