سؤال كيف يمكنني التبديل بين Java 7 و Java 6 على OS X 10.8.2؟


أنا أستخدم برنامج Java SE 7 لبرمجة ألعاب بسيطة للنوافذ وماك ، لكنني يجب أن أتحول إلى java 6 لتشغيل ألعاب مثل Minecraft على جهاز الكمبيوتر الخاص بي. استخدم هذا للعمل بشكل جيد قبل أن أقوم بالتحديث إلى Mac OS X 10.8.2 Build 12C60.

قبل هذا التحديث اعتدت أن أكون قادرا على فتح تفضيلات جافا والتحقق من Java 6 أو Java 7. ولكن الآن لا يبدو أنني قادر على العثور على تفضيلات Java.

أنا أقوم بتشغيل OS X 10.8.2 (أحدث إصدار).


82
2017-10-20 21:36


الأصل


أنت على صواب ، تتم إزالة Java Preferences الآن مع آخر تحديث. بعض أساليب shell المختلفة التي جربتها لا تعمل ، ولكن يجب أن تكون هناك آلية لتسهيل ذلك عند تشغيل أحدث 7 أيضًا. - ylluminate


الأجوبة:


لا أعتقد أنه من الممكن تبديل JRE (بيئات وقت التشغيل) انظر هنا:

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

التي تنص على:

يمكن تثبيت JRE واحد فقط. تثبيت JRE يزيل السابق   تثبيت JRE. يمكن تحديد إصدار JRE المستخدم من قبل النظام   بإحدى طريقتين:

الحل:

كان لدي مشكلة مماثلة كما لديك مع Minecraft مع Wuala. حيث كنت بحاجة إلى تشغيل Wuala باستخدام Java 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 $*

I.e ببساطة استبدال: 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 ، إما تحديد المسار الكامل ، أو استخدام أداة 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 ./

أبل المقدمة 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 ./

هذا يعمل بالنسبة لي أيضا لاستخدام أبل الموردة 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
2017-10-24 17:40





يمكن للمرء استخدام 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 سوف يتحول إلى جافا 6.


98
2018-02-22 12:26



في java_use يجب إزالة java السابقة من $ PATH. - Eir Nym
EirNym كيف يمكن للمرء أن يفعل ذلك؟ - Malcolm
شيء وجدت مفيدة لإزالة جافا السابقة من $ PATH 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/:$//'     تصدير PATH = $ JAVA_HOME / bin: $ PATH java -version} - Nitin Mahesh


حل لسهولة تبديل 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

35
2018-03-18 22:53





الحل السريع هو إنشاء ارتباط رمزي إلى Java 6 binary القديم:

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 لا يقوم بإدراج 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
2017-10-21 14:58





من السهل جدًا تبديل إصدارات Java في الحال على OS X دون الحاجة إلى تغيير المتغير $ JAVA_HOME.

أنا أقوم بتشغيل 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. ما عليك سوى تبديل أي Symlink يحمل اسم "الصفحة الرئيسية" حاليًا لتغيير java JRE الافتراضي على الفور.


3
2018-05-16 22:11





هنا طريقة سهلة لتبديل java 6 و java 7 على mac osx.

الخطوة 1: تنزيل jdk 7 من موقع oracle الرسمي http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html  وتثبيته خطوة بخطوة اتبع النصائح.

الخطوة 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
2017-11-12 10:15





قم بإدارة بيئة Java (على نظامي Mac و Linux): http://www.jenv.be/

مشابه لـ RVM لـ Ruby و N للعقدة ولكن لـ Java.


3
2018-06-10 17:02





استنادًا إلى ما ورد أعلاه وبعض الأبحاث الأخرى ، ابتكرت نصًا يمكنك من خلاله "المصدر" (أو "نقطة") في ملفك الشخصي. ستطالبك بقائمة JAVA_HOMEs المتاحة على جهاز Mac الخاص بك ، على الرغم من أنه يمكنك أيضًا تحديد المنزل الافتراضي ، أو تحديد خيار القائمة مسبقًا.

في .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





إصدار shell shell الخاص بـalex answer (إضافة إلى ~/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