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


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

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

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


82
2017-10-20 21:36


मूल


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


जवाब:


मुझे नहीं लगता कि जेआरई (रनटाइम वातावरण) को यहां स्विच करना संभव है:

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

कौन सा राज्य:

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

युक्ति:

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

एक और जेडीके का उपयोग करने के लिए यहां देखें:

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

मेरे सेटअप से एक उदाहरण और उदाहरण यहां दिया गया है:

ओरेकल जेडीके इंस्टॉल करता है:

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

ऐप्पल ने जेडीके की आपूर्ति की:

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

यह मेरे लिए 1.6 जेडीके आपूर्ति किए गए ऐप्पल का उपयोग करने के लिए भी काम करता है

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 ओरेकल संस्करणों के बीच चुनें:

पहले ओरेकल जेडीके 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)

जेडीके 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)

डिफ़ॉल्ट जेडीके सबसे ज्यादा है:

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 तंत्र अधिक सुविधाजनक।

मान लें कि आपके पास जावा 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_ls के उत्पादन को कम कर देता है java_home -V केवल संस्करण संख्याओं के लिए। तथा java_use हमने जो किया है उसके लिए सिर्फ एक शॉर्टकट है। जैसे java_use 1.6 जावा 6 पर स्विच करेगा।


98
2018-02-22 12:26



java_use में आपको पिछले जावा को $ PATH से हटा देना चाहिए। - Eir Nym
@EirNym कोई ऐसा कैसे करेगा? - Malcolm
कुछ पाथ से पिछले जावा को हटाने के लिए मुझे कुछ मिला stackoverflow.com/a/370192/1503859 - Nitin Mahesh
java_use को अपडेट करें जो मेरे लिए काम करता है: function java_use () {export JAVA_HOME = $ (/ usr / libexec / java_home -v $ 1) निर्यात PATH =echo $PATH | awk -v RS=: -v ORS=: '/Library\/Java\/JavaVirtualMachines/ {next} {print}'| sed 's/:$//'     निर्यात पाथ = $ JAVA_HOME / बिन: $ पाथ जावा-संस्करण} - Nitin Mahesh


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

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





पुराने जावा 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 प्राथमिकता ऐप जावा 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
2017-10-21 14:58





$ JAVA_HOME चर बदलने की आवश्यकता के बिना ओएस एक्स पर तुरंत जावा संस्करणों को स्विच करना बहुत आसान है।

मैं 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

और voila! जावा-वर्जन दिखाता है कि अब मैं जावा 1.7 चला रहा हूं। डिफ़ॉल्ट जावा जेआरई को तुरंत बदलने के लिए बस सिमलिंक को वर्तमान में 'होम' नाम दिया गया है स्विच करें।


3
2018-05-16 22:11





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

चरण 1: ओरेकल आधिकारिक वेबसाइट से 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 का उपयोग करना चाहते हैं, तो 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

3
2017-11-12 10:15





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

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


3
2018-06-10 17:02





उपर्युक्त और कुछ अन्य शोधों के आधार पर, मैंने आपकी प्रोफ़ाइल में एक "स्क्रिप्ट" (या "डॉट") कर सकते हैं। यह आपको अपने मैक पर उपलब्ध 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

2
2018-02-21 14:32





@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
2018-03-12 13:10