كيف يمكنك تغيير الإصدار الافتراضي من جافا على ماك؟
قم أولاً بتشغيل /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)
هذه الإجابة هي محاولة لمعالجة: كيفية التحكم في إصدار جافا على مستوى النظام (ليس فقط في حالة تشغيل شل حاليًا) عند تثبيت عدة إصدارات من JDK لأغراض التطوير على macOS El Capitan أو الأحدث (Sierra، High Sierra، Mojave) . بقدر ما أستطيع أن أقول ، فإن أيا من الإجابات الحالية تفعل ذلك (*).
كمطور ، أستخدم عدة إصدارات JDK ، وأريد التبديل من واحدة إلى أخرى بسهولة. عادةً ما يكون لدي آخر مستقر للاستخدام العام ، والآخر للاختبارات. لكنني لا أريد أن يستخدم النظام (على سبيل المثال عندما أبدأ IDE) أحدث إصدار "وصول مبكر" لدي الآن. أريد التحكم في النظام الافتراضي ، ويجب أن يكون هذا آخر مستقر.
تعمل الطريقة التالية مع Java 7 إلى 12 على الأقل (الوصول المبكر في وقت كتابة هذا التقرير) ، مع Oracle JDK أو OpenJDK (بما في ذلك builds بواسطة AdoptOpenJDK أنتجت بعد منتصف أكتوبر 2018 ).
/Library/Java/JavaVirtualMachines
. سيختار النظام أعلى إصدار افتراضيًا.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 ، إنه رائع وكل شيء ، لكن بقدر ما أستطيع أن أقول إنه يغير فقط متغيرات البيئة ، لذلك يكون له نفس القيد.
إضافة إلى الإجابات المذكورة أعلاه ، أضع الأسطر التالية في .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)
وظيفة الأسماك الصغيرة على أساس/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
استخدام 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
إنه أمر صعب بعض الشيء ، لكن حاول اتباع الخطوات الموضحة في تثبيت 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 دائمًا في المحطة الطرفية
تثبيت 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
ليرة تركية، والدكتور
أضف السطر:
export Java_HOME='/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home'
إلى الملف
~/.bash_profile
استبدال مع الإصدار الذي تم تنزيله.
ثم source ~/.bash_profile
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:?;;") }
استخدم 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
من صفحة 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`
إذا كنت لا تزال غير قادر على تعيينها. باستخدام هذا الأمر.
تصدير Java_HOME = /usr/libexec/Java_home -v 1.8
ثم عليك استخدام هذا واحد.
تصدير Java_HOME = $(/usr/libexec/Java_home -v 1.8)
انها ستعمل بالتأكيد.
اكتشف أولاً أين تخزن متغيرات البيئة -
خطوات لإعداد متغير البيئة: -
الآن قم بإعداد متغيرات البيئة في ملفك
ا. من أجل emacs.profile يمكنك استخدام هذا الرابط OR انظر لقطة الشاشة أدناه
ب. لإعداد ملف تعريف 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)
كل مجموعة الآن يمكنك بسهولة ترقية أو تقليل إصدار جافا ..
لقد قمت بتكييف الإجابة من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;
}
$ 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)
$ 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)
إذا كنت تستخدم 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
استنادًا إلى إجابة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
أضف الأمر التالي إلى ملف ~/.zshenv
export Java_HOME=`/usr/libexec/Java_home -v 1.8`
طريقة سهلة لتضمين 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
ويمكنك تحديده كما هو موضح أعلاه.
إليك كيفية القيام بذلك على Linux (Ubuntu/Mint mate) ، أعتقد أن Mac يمكن أن يفعل ذلك بشكل مشابه.
الخطوات:
/mnt/star/program/Java/jdk-1.8
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
يجب أن يطبع إصدار جافا./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
jv8
jvd
name___E_Java_HOME_D
المعرفة أعلاه.jv
name__مثال الإخراج:
[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
Java
name__
أقوم بتعريف الاسم المستعار للأمر في ~/.bashrc
، لكنني أعرّف المتغير في ملف منفصل.
أنا أستخدم ~/.eric_var
لتحديد المتغيرات ، وسوف ~/.bashrc
مصدرها (على سبيل المثال ، source $HOME/.eric_var
).
إذا كان لديك إصدارات متعددة وتريد تشغيل شيء ما باستخدام إصدار محدد ، استخدم هذا المثال:
/usr/libexec/Java_home -v 1.7.0_75 --exec Java -jar you-file.jar
هذه الأداة ستقوم بالعمل من أجلك:
http://www.guigarage.com/2013/02/change-Java-version-on-mac-os/
إنه JavaOne بسيط يمكن استخدامه لتحديد إصدار Java الحالي. يمكن استخدام الإصدار في Shell الذي يتم فتحه بعد تحديد إصدار في الأداة.