it-swarm.asia

كيفية تعيين أو تغيير إصدار Java (JDK) الافتراضي على OS X؟

كيف يمكنك تغيير الإصدار الافتراضي من جافا على ماك؟

524
Venkat

قم أولاً بتشغيل /usr/libexec/Java_home -V والذي سينتج عنه شيء مثل التالي:

Matching Java Virtual Machines (3):
1.8.0_05, x86_64:   "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home
1.6.0_65-b14-462, x86_64:   "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
1.6.0_65-b14-462, i386: "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home

اختر الإصدار الذي تريد أن تكون الافتراضي (1.6.0_65-b14-462 من أجل الوسائط) ثم:

export Java_HOME=`/usr/libexec/Java_home -v 1.6.0_65-b14-462`

أو يمكنك تحديد الإصدار الرئيسي فقط ، مثل:

export Java_HOME=`/usr/libexec/Java_home -v 1.8`

الآن عند تشغيل Java -version ، سترى:

Java version "1.6.0_65"
Java(TM) SE Runtime Environment (build 1.6.0_65-b14-462-11M4609)
Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-462, mixed mode)

ما عليك سوى إضافة السطر export Java_HOME… إلى ملف التهيئة الخاص بشركة Shell.

بالنسبة لـ Bash (كما هو موضح بواسطة antonyh ):

export Java_HOME=$(/usr/libexec/Java_home -v 1.8)
934
markhellewell

هذه الإجابة هي محاولة لمعالجة: كيفية التحكم في إصدار جافا على مستوى النظام (ليس فقط في حالة تشغيل شل حاليًا) عند تثبيت عدة إصدارات من JDK لأغراض التطوير على macOS El Capitan أو الأحدث (Sierra، High Sierra، Mojave) . بقدر ما أستطيع أن أقول ، فإن أيا من الإجابات الحالية تفعل ذلك (*).

كمطور ، أستخدم عدة إصدارات JDK ، وأريد التبديل من واحدة إلى أخرى بسهولة. عادةً ما يكون لدي آخر مستقر للاستخدام العام ، والآخر للاختبارات. لكنني لا أريد أن يستخدم النظام (على سبيل المثال عندما أبدأ IDE) أحدث إصدار "وصول مبكر" لدي الآن. أريد التحكم في النظام الافتراضي ، ويجب أن يكون هذا آخر مستقر.

تعمل الطريقة التالية مع Java 7 إلى 12 على الأقل (الوصول المبكر في وقت كتابة هذا التقرير) ، مع Oracle JDK أو OpenJDK (بما في ذلك builds بواسطة AdoptOpenJDK أنتجت بعد منتصف أكتوبر 2018 ).

الحل بدون أدوات الطرف الثالث:

  • اترك جميع JDKs في موقعها الافتراضي ، تحت /Library/Java/JavaVirtualMachines. سيختار النظام أعلى إصدار افتراضيًا.
  • لاستبعاد JDK من اختياره افتراضيًا ، أعد تسمية Contents/Info.plist إلى Info.plist.disabled. لا يزال من الممكن استخدام ذلك JDK عندما يشير $Java_HOME إليه أو الإشارة إليه صراحة في برنامج نصي أو تكوين. سيتم تجاهله ببساطة أمر Java الخاص بالنظام.

سيستخدم مشغل النظام JDK مع أعلى إصدار بين أولئك الذين لديهم ملف Info.plist.

عند العمل في Shell باستخدام JDK بديل ، اختر طريقتك بين الإجابات الحالية (jenv ، أو الأسماء المستعارة/البرامج النصية المخصصة حول /usr/libexec/Java_home ، إلخ).


تفاصيل التحقيق في هذا Gist .


(*) الإجابات الحالية إما قديمة (لم تعد صالحة لنظام التشغيل macOS El Capitan أو Sierra) ، أو تتعامل فقط مع JDK واحد ، أو لا تعالج الجانب على مستوى النظام. يشرح الكثيرون كيفية تغيير $Java_HOME ، لكن هذا يؤثر فقط على Shell الحالي وما يتم إطلاقه من هناك. لن يؤثر ذلك على تطبيق بدأ من قاذفة نظام التشغيل (إلا إذا قمت بتغيير الملف الصحيح وتسجيل الخروج/تسجيل الدخول ، وهو أمر ممل). الشيء نفسه بالنسبة لـ jenv ، إنه رائع وكل شيء ، لكن بقدر ما أستطيع أن أقول إنه يغير فقط متغيرات البيئة ، لذلك يكون له نفس القيد.

284
Hugues M.

إضافة إلى الإجابات المذكورة أعلاه ، أضع الأسطر التالية في .bash_profile الخاص بي مما يجعل من السهل التبديل (بما في ذلك تعليق @ elektromin على Java 9):

alias j12="export Java_HOME=`/usr/libexec/Java_home -v 12`; Java -version"
alias j11="export Java_HOME=`/usr/libexec/Java_home -v 11`; Java -version"
alias j10="export Java_HOME=`/usr/libexec/Java_home -v 10`; Java -version"
alias j9="export Java_HOME=`/usr/libexec/Java_home -v 9`; Java -version"
alias j8="export Java_HOME=`/usr/libexec/Java_home -v 1.8`; Java -version"
alias j7="export Java_HOME=`/usr/libexec/Java_home -v 1.7`; Java -version"

بعد الإدراج ، قم بتنفيذ $ source .bash_profile

يمكنني التبديل إلى Java 8 عن طريق كتابة ما يلي:

$ j8
Java version "1.8.0_102"
Java(TM) SE Runtime Environment (build 1.8.0_102-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)
157
Justin Zhang

وظيفة الأسماك الصغيرة على أساس/usr/libexec/Java_home

function jhome
    set Java_HOME (/usr/libexec/Java_home $argv)
    echo "Java_HOME:" $Java_HOME
    echo "Java -version:"
    Java -version
end

إذا كنت لا تستخدم الأسماك ، يمكنك أن تفعل شيئًا مشابهًا في bash:

#!/bin/bash

jhome () {
  export Java_HOME=`/usr/libexec/Java_home [email protected]`
  echo "Java_HOME:" $Java_HOME
  echo "Java -version:"
  Java -version
}

ثم للتبديل بين جافا تفعل:

$> jhome           #switches to latest Java
$> jhome -v 1.7    #switches to Java 1.7
$> jhome -v 1.6    #switches to Java 1.6

المرجع: https://Gist.github.com/kenglxn/1843d552dff4d4233271

49
kenglxn

استخدام jenv هو وسيلة سهلة.

1. تثبيت jenv

     curl -s get.jenv.io | سحق

2.Config jenv

 قرص مضغوط ~/.jenv/المرشحين/DD.____.] mkdir Java 
 cd Java 
 mkdir 1.7 
 mkdir 1.8 

3. ربط مسار jdk

 ln -s /Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin ~/.jenv/المرشحين/Java/1.7 
 ln -s/Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/المحتويات/الصفحة الرئيسية/bin ~/.jenv/المرشحين/Java/1.8 

4. أنت كل مجموعة

تبديل الأوامر:

jenv استخدام جافا 1.8

الوضع الإفتراضي:

jenv افتراضي جافا 1.7

29
Yuantao

إنه أمر صعب بعض الشيء ، لكن حاول اتباع الخطوات الموضحة في تثبيت Java على OS X 10.9 (مافريكس) . بشكل أساسي ، يجب عليك تحديث الاسم المستعار الخاص بك إلى Java.

خطوة بخطوة:

بعد تثبيت الإصدار 1.7 من JDK ، ستحتاج إلى تنفيذ Sudo ln -snf من أجل تغيير الرابط إلى Java الحالي. للقيام بذلك ، افتح المحطة الطرفية وأصدر الأمر:

Sudo ln -nsf /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents \
/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK

لاحظ أن الدليل jdk1.7.0_51.jdk قد يتغير وفقًا لإصدار SDK الذي قمت بتثبيته.

الآن ، تحتاج إلى تعيين Java_HOME للإشارة إلى مكان تثبيت jdk_1.7.0_xx.jdk. افتح الجهاز مرة أخرى واكتب:

export Java_HOME="/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home"

يمكنك إضافة سطر export Java_HOME أعلاه في ملف .bashrc الخاص بك لجعل Java دائمًا في المحطة الطرفية

26
Trein

تثبيت JDK ، وليس فقط JRE

/usr/libexec/Java_home -v 1.8

يعطي

/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home

التالى

touch .bash_profile

open -a TextEdit.app .bash_profile

ستظهر لك TextEdit صفحة فارغة يمكنك ملؤها.

أضف إلى الوثيقة: export Java_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home

في المحطة:

export Java_HOME="$(/usr/libexec/Java_home -v 1.8)"

جرب الأمر:

javac -version

يجب أن الإخراج:

javac 1.8.0_111
22
user2708060

ليرة تركية، والدكتور

أضف السطر:

export Java_HOME='/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home'

إلى الملف

~/.bash_profile

استبدال مع الإصدار الذي تم تنزيله.

ثم source ~/.bash_profile

14
dustinevan
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 [email protected]`
    export PATH=$Java_HOME/bin:$PATH
  fi
}

ضع هذا في ملف التعريف ~/.profile الخاص بك واستخدمه في جهازك مثل: setjdk 1.8 ، setjdk 1.7 ، setjdk 9 وغيرها ، إلخ ...

إذا لم يكن لديك removeFromPath فهو:

function removeFromPath() { export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;") }

10
Gabriel Reiser

استخدم jenv ، فهو يشبه مدير بيئة جافا. إنه سهل الاستخدام والتنظيف

لنظام التشغيل Mac ، اتبع الخطوات:

brew install jenv

git clone https://github.com/gcuisinier/jenv.git ~/.jenv

التثبيت: إذا كنت تستخدم bash ، فاتبع الخطوات التالية:

$ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile

echo 'eval "$(jenv init -)"' >> ~/.bash_profile

$ exec $Shell -l

أضف الإصدارات المطلوبة من JVM إلى jenv:

jenv add /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

jenv add /System/Library/Java/JavaVirtualMachines/1.8.0.jdk/Contents/Home

تحقق من الإصدارات المثبتة:

jenv versions

قم بتعيين إصدار Java الذي تريد استخدامه بواسطة:

jenv global Oracle64-1.6.0
9
slal

من صفحة Apple الرسمية Java_home (1) صفحة رجل :

**USAGE**

   /usr/libexec/Java_home  helps  users  set a $Java_HOME in their login rc files, or provides a way for
   command-line Java tools to use the most appropriate JVM which can satisfy a minimum version or archi-
   tecture  requirement.  The --exec argument can invoke tools in the selected $Java_HOME/bin directory,
   which is useful for starting Java command-line tools from launchd plists without hardcoding the  full
   path to the Java command-line tool.

   Usage for bash-style shells:
          $ export Java_HOME=`/usr/libexec/Java_home`

   Usage for csh-style shells:
          % setenv Java_HOME `/usr/libexec/Java_home`
5
Antonio

إذا كنت لا تزال غير قادر على تعيينها. باستخدام هذا الأمر.

تصدير Java_HOME = /usr/libexec/Java_home -v 1.8

ثم عليك استخدام هذا واحد.

تصدير Java_HOME = $(/usr/libexec/Java_home -v 1.8)

انها ستعمل بالتأكيد.

4
RohitKumar

اكتشف أولاً أين تخزن متغيرات البيئة -

  1. ايماكس
  2. bash_profile
  3. ملف zshrc

خطوات لإعداد متغير البيئة: -

  1. قم بتنزيل jdk من Java
  2. تثبيته عن طريق النقر المزدوج
  3. الآن قم بإعداد متغيرات البيئة في ملفك

    ا. من أجل emacs.profile يمكنك استخدام هذا الرابط OR انظر لقطة الشاشة أدناه

 enter image description here

ب. لإعداد ملف تعريف ZSH -

1. export Java_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home

2. source ~/.zshrc - Restart zshrc to reflect the changes.

3. echo $Java_HOME - make sure path is set up properly 
   ----> /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home

4. Java -version 

   -->  Java version "1.8.0_112"  Java(TM) SE Runtime Environment (build 1.8.0_112-b16)Java HotSpot(TM) 64-Bit Server VM (build 25.112-b16, mixed mode)

كل مجموعة الآن يمكنك بسهولة ترقية أو تقليل إصدار جافا ..

3
Vrushali Raut

JDK التبديل النصي

لقد قمت بتكييف الإجابة منAlex أعلاه وكتبت ما يلي لإصلاح رمز Java 9.

$ cat ~/.jdk
#!/bin/bash

#list available jdks
alias jdks="/usr/libexec/Java_home -V"
# jdk version switching - e.g. `jdk 6` will switch to version 1.6
function jdk() {
  echo "Switching Java version $1";

  requestedVersion=$1
  oldStyleVersion=8
  # Set the version
  if [ $requestedVersion -gt $oldStyleVersion ]; then
    export Java_HOME=$(/usr/libexec/Java_home -v $1);
  else
    export Java_HOME=`/usr/libexec/Java_home -v 1.$1`;
  fi

  echo "Setting Java_HOME=$Java_HOME"

  which Java
  Java -version;
}

قم بالتبديل إلى Java 8

$ jdk 8
Switching Java version 8
Setting Java_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home
/usr/bin/Java
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)

قم بالتبديل إلى Java 9

$ jdk 9
Switching Java version 9
Setting Java_HOME=/Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home
/usr/bin/Java
java version "9.0.1"
Java(TM) SE Runtime Environment (build 9.0.1+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.1+11, mixed mode)
3
Marcello de Sales

إذا كنت تستخدم fish وكنت تستخدم mac وتريد أن تكون قادرًا على التبديل بين JDK ، فستعمل أدناه لي على mac.

لم تنجح إجابة kenglxn @ بالنسبة لي ، فكنت أحسب أنه لم يحدد bcos -g وهو عالمي!

وضعت أدناه تحت ~ /. التكوين/الأسماك/config.fish

alias j8="jhome  -v 1.8.0_162"
alias j9="jhome  -v 9.0.1"

function jhome
    set -g -x Java_HOME (/usr/libexec/Java_home $argv)
    echo "Java_HOME:" $Java_HOME
    echo "Java -version:"
    Java -version
end

funcsave jhome

لمعرفة الإصدار/الإصدار الثانوي الذي قمت بتثبيته ، يمكنك القيام بما يلي:

/usr/libexec/Java_home -V                                                                              579ms  Wed 14 Feb 11:44:01 2018
Matching Java Virtual Machines (3):
    9.0.1, x86_64:  "Java SE 9.0.1" /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home
    1.8.0_162, x86_64:  "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home
    1.8.0_121, x86_64:  "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home
2
Gob00st

استنادًا إلى إجابةmarkhellewell ، قمتُ بإنشاء عدد من وظائف الاسم المستعار التي ستقوم بذلك نيابة عنك. فقط أضف هذه الملفات إلى ملف بدء تشغيل Shell

#list available jdks
alias jdks="/usr/libexec/Java_home -V"
# jdk version switching - e.g. `jdk 6` will switch to version 1.6
function jdk() { 
  echo "Switching Java version"; 
  export Java_HOME=`/usr/libexec/Java_home -v 1.$1`; 
  Java -version; 
}

https://Gist.github.com/Noyabronok/0a90e1f3c52d1aaa941013d3caa8d0e4

1
Alex

أضف الأمر التالي إلى ملف ~/.zshenv

export Java_HOME=`/usr/libexec/Java_home -v 1.8` 
1
xsilen T

طريقة سهلة لتضمين JDK مثبتة بشكل منفصل في القائمة المقدمة بواسطة /usr/libexec/Java_home -V هي ربط الدليل على النحو التالي:

Sudo ln -s path/to/jdk /Library/Java/JavaVirtualMachines/jdk-[some-identifier].jdk

على سبيل المثال ، لتسجيل JDK المتضمن في Android Studio (1.8.0_152 وقت كتابة هذا التقرير) ، استخدم:

Sudo ln -s /Applications/Android\ Studio.app/Contents/jre/jdk /Library/Java/JavaVirtualMachines/jdk-Android-studio.jdk

الآن Java_home ستدرج JDK ضمن Matching Java Virtual Machines ويمكنك تحديده كما هو موضح أعلاه.

1
friederbluemle

إليك كيفية القيام بذلك على Linux (Ubuntu/Mint mate) ، أعتقد أن Mac يمكن أن يفعل ذلك بشكل مشابه.


تثبيت و التكوين

الخطوات:

  • [أساسي - جزء]
  • قم بتنزيل jdk (the .tgz file) باليد.
  • إلغاء ضغط وإعادة تسمية بشكل صحيح ، في المكان المناسب.
    على سبيل المثال ، /mnt/star/program/Java/jdk-1.8
  • قم بإنشاء ارتباط ضعيف ، والذي سيتم تغييره لتبديل إصدار Java لاحقًا.
    على سبيل المثال ، ln -s /mnt/star/program/Java/jdk-1.8 /mnt/star/program/Java/java
    هكذا /mnt/star/program/Java/java هو الرابط السلس.
  • اضبط Java_HOME في برنامج نصي لبدء التشغيل.
    يمكن استخدام ملف مثل /etc/profile.d/eric.sh ، أو مجرد استخدام ~/.bashrc.
    على سبيل المثال ، Java_HOME=/mnt/star/program/Java/java
  • ثم افتح باش شل الجديد. Java -version يجب أن يطبع إصدار جافا.
  • [المزيد من الإصدار - جزء]
  • قم بتنزيل وتثبيت المزيد من إصدار Java ، حسب الحاجة ، على غرار الخطوات المذكورة أعلاه.
    منها مثلا
    /mnt/star/program/Java/jdk-11
  • [التبديل - جزء]
  • في ~/.bashrc ، حدد المتغير لإصدار Java مختلف.
    منها مثلا
    _E_Java_HOME_11='/mnt/star/program/Java/jdk-11'
    _E_Java_HOME_8='/mnt/star/program/Java/jdk-8'
    # dir of default version,
    _E_Java_HOME_D=$_E_Java_HOME_8
  • في ~/.bashrc ، قم بتعريف الأمر لتبديل إصدار Java.
    منها مثلا
    ## switch Java version,
    alias jv11="rm $Java_HOME; ln -s $_E_Java_HOME_11 $Java_HOME"
    alias jv8="rm $Java_HOME; ln -s $_E_Java_HOME_8 $Java_HOME"
    # default Java version,
    alias jvd="rm $Java_HOME; ln -s $_E_Java_HOME_D $Java_HOME"
    alias jv="Java -version"
  • في المحطة ، source ~/.bashrc لجعل التغييرات نافذة المفعول.
  • ثم يمكن التبديل باستخدام الأوامر المحددة.

أوامر - من التكوين أعلاه

الأوامر:

  • jv11
    التبديل إلى Java 11
  • jv8
    التبديل إلى Java 8
  • jvdname__
    قم بالتبديل إلى إصدار Java الافتراضي ، والذي يرمز إليه بـ _E_Java_HOME_D المعرفة أعلاه.
  • jvname__
    عرض نسخة جافا.

مثال الإخراج:

[email protected]:~$ jv
Java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

[email protected]:~$ jv11
[email protected]:~$ jv
Java version "11.0.1" 2018-10-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.1+13-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.1+13-LTS, mixed mode)

[email protected]:~$ jvd
[email protected]:~$ jv
Java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

[email protected]:~$ 

آلية

  • يتم التبديل عن طريق تغيير الارتباط اللين ، والذي يستخدم كـ Java_HOME.

نصائح

  • على الجهاز الخاص بي عند تثبيت jdk باليد ، احتفظ بالإصدار الثانوي ، ثم أقوم بإنشاء رابط ضعيف مع الإصدار الرئيسي ولكن بدون الإصدار الثانوي.
    منها مثلا
    // هذا هو دير الفعلي ،
    jdk1.8.0_191

    // هذا رابط ضعيف إلى jdk1.8.0_191
    jdk-8

    // هذا رابط ضعيف إلى jdk-8 أو jdk-11
    Javaname__

  • أقوم بتعريف الاسم المستعار للأمر في ~/.bashrc ، لكنني أعرّف المتغير في ملف منفصل.
    أنا أستخدم ~/.eric_var لتحديد المتغيرات ، وسوف ~/.bashrc مصدرها (على سبيل المثال ، source $HOME/.eric_var).

0
Eric Wang

إذا كان لديك إصدارات متعددة وتريد تشغيل شيء ما باستخدام إصدار محدد ، استخدم هذا المثال:

/usr/libexec/Java_home -v 1.7.0_75 --exec Java -jar you-file.jar
0
MonstroDev

هذه الأداة ستقوم بالعمل من أجلك:

http://www.guigarage.com/2013/02/change-Java-version-on-mac-os/

إنه JavaOne بسيط يمكن استخدامه لتحديد إصدار Java الحالي. يمكن استخدام الإصدار في Shell الذي يتم فتحه بعد تحديد إصدار في الأداة.

0
Hendrik Ebbers