Як можна змінити типову версію Java на mac?
Як можна змінити типову версію Java на mac?
Відповіді:
Перший запуск, /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…
рядок до файлу init вашої оболонки.
Для Баша (як заявив Антоні ):
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
Для риб (як заявляє ormurin)
set -x JAVA_HOME (/usr/libexec/java_home -d64 -v1.8)
export
рядком лінії
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
- також зауважте, java_home дозволяє часткові збіги, тому вам не доведеться включати повну версію, оскільки вона знайде останню встановлену версію. Це полегшує оновлення.
Ця відповідь є спробою вирішити: як керувати версією java-версії на всій системі (не тільки в поточній запущеній оболонці), коли для розробки в macOS El Capitan або новіших версіях (Sierra, High Sierra, Mojave) встановлено кілька версій JDK . Наскільки я можу сказати, жодна з нинішніх відповідей цього не робить (*).
Як розробник я використовую кілька JDK, і хочу легко переходити з одного на інший. Зазвичай у мене є останній стабільний для загального використання та інші для тестів. Але я не хочу, щоб система (наприклад, коли я запускаю IDE) використовувала останню версію "раннього доступу", яку я маю на даний момент. Я хочу контролювати систему за замовчуванням, і це має бути останньою стабільною.
Наступний підхід працює принаймні з Java 7 до 12 (ранній доступ на момент написання цього повідомлення), з Oracle JDK або OpenJDK (включаючи версії AdoptOpenJDK, виготовлені після середини жовтня 2018 року ).
/Library/Java/JavaVirtualMachines
. Система вибере найвищу версію за замовчуванням. Contents/Info.plist
наInfo.plist.disabled
. Цей JDK все ще може використовуватися, коли він $JAVA_HOME
вказує на нього, або явно посилається в сценарії чи конфігурації. Це буде просто ігноруватися командою системи java
.Система запуску використовуватиме JDK з найвищою версією серед тих, у кого є Info.plist
файл.
Працюючи в оболонці з альтернативним JDK, виберіть свій метод серед наявних відповідей ( jenv
або власні псевдоніми / сценарії навколо /usr/libexec/java_home
тощо).
Деталі розслідування в цій суті .
(*) Поточні відповіді або є застарілими (більше не дійсні для macOS El Capitan або Sierra), або звертаються лише до одного JDK, або не стосуються загальносистемного аспекту. Багато хто пояснює, як змінити $JAVA_HOME
, але це впливає лише на поточну оболонку і те, що запускається звідти. Це не вплине на програму, запущену з запуску ОС (якщо ви не зміните потрібний файл та вихід / вхід, що втомлює). Це ж саме для jenv, це круто і все, але, наскільки я можу сказати, це просто змінює змінні середовища, тому воно має таке ж обмеження.
jenv
не JAVA_HOME
в змозі встановити загальносистемну версію Java, тобто ту, яку використовував Eclipse.
/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/
. Мабуть, це саме те, що буде запущено нову панель налаштувань - це єдиний виняток, який я знайшов у своєму рішенні: що thingy як і раніше використовуватиме JDK9 (останнє, що я встановив), але жоден інший додаток Java не робить ".
Додаючи до вищезазначених відповідей, я розміщую наступні рядки у своєму .bash_profile
(або .zshrc
для MacOS 10.15+), що робить його дуже зручним для перемикання (включаючи коментар @ 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)
alias j9="export JAVA_HOME=`/usr/libexec/java_home -v 9`; java -version"
alias j10="export JAVA_HOME=`/usr/libexec/java_home`; java -version"
а потім введення тексту j10
дозволяє перейти до поточної версії Java (у моєму випадку Java 10)
nvm
перемикання версій Java, але абревіатура jvm
вже означає щось інше :)
/Users/me/.zshrc:8: permission denied: /Library/Java/JavaVirtualMachines/openjdk-12.jdk/Contents/Home
Функція невеликої рибки на основі / 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 $@`
echo "JAVA_HOME:" $JAVA_HOME
echo "java -version:"
java -version
}
Потім для переключення між javas виконайте:
$> 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
export JAVA_HOME=(/usr/libexec/java_home $argv)
замість другого рядка вашої jhome
функції.
Це трохи хитро, але спробуйте виконати кроки, описані в Інсталяція Java на OS X 10.9 (Mavericks) . По суті, вам доведеться оновити псевдонім до java
.
Крок за кроком:
Після встановлення JDK 1.7 вам потрібно буде зробити це sudo ln -snf
для того, щоб змінити посилання на поточне java
. Для цього відкрийте Terminal і видайте команду:
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 у своєму терміналі
JAVA_HOME
буде експортована на поточному сеансі терміналу. Ви можете додати його до нашого, .bashrc
якщо хочете. Я адаптую команди до останньої версії.
Використовувати jenv - простий спосіб.
1.Встановіть jenv
завиток -с get.jenv.io | баш
2.Config jenv
cd ~ / .jenv / кандидати / mkdir java cd java mkdir 1.7 mkdir 1,8
3.Symlink шлях 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/Contents/Home/bin ~ / .jenv / кандидати / java / 1.8
4.У вас все налаштовано
команда перемикання:
jenv використовуйте java 1.8
встановити за замовчуванням:
jevv за замовчуванням java 1.7
встановити 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 покаже вам порожню сторінку, яку ви можете заповнити.
додати в doc:
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
Використовуйте jenv, це як диспетчер середовища Java. Це дуже просто у використанні та чищенні
Для 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
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
}
помістити це в ваш ~ / .profile і використовувати його в вашому терміналі , як так setjdk 1.8
, setjdk 1.7
, і setjdk 9
т.д. і т.п. ...
Якщо у вас немає, removeFromPath
це:
function removeFromPath() {
export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;")
}
Чотири простих кроки з використанням терміналу для людей, які використовують процес за замовчуванням .. :)
echo $JAVA_HOME
дає вам поточний ява додому. Наприклад:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/
cd /Library/Java/JavaVirtualMachines/
перенесе вас у папку, де ви зазвичай встановлюєте jdks (це може бути інакше для ваших машин)
ls
показує вам доступні папки ( як правило , це буде мати номер версії, наприклад: jdk1.8.0_191.jdk openjdk-11.0.2.jdk
)export JAVA_HOME='/Library/Java/JavaVirtualMachines/openjdk-11.0.2.jdk/Contents/Home'
змінить будинок java ..macOS El Capitan або новішої версії виберуть вищу версію JDK, доступну в /Library/Java/JavaVirtualMachines
, тому для того, щоб повернути її назад, ви можете перейменувати файл Info.plist
на щось інше, наприклад, Info.plist.disabled
що ОС вибере попередню версію.
З офіційної сторінки java_home (1) від Apple від Apple :
**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`
Спочатку з’ясуйте, де ви зберігаєте змінні середовища -
Кроки для налаштування змінної середовища:
Тепер налаштуйте змінні середовища у вашому файлі
а. Для emacs.profile ви можете скористатися цим посиланням АБО дивіться на скріншоті нижче
б. Для налаштування профілю 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)
Все готово. Тепер ви можете легко оновити або деградувати версію JAVA.
Я адаптував відповідь від @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)
Якщо ви все ще не можете встановити його. за допомогою цієї команди.
експортувати JAVA_HOME =/usr/libexec/java_home -v 1.8
тоді вам доведеться користуватися цим.
експортувати JAVA_HOME =$(/usr/libexec/java_home -v 1.8)
це обов’язково спрацює.
Ви можете додати його у свій .bash_profile, щоб встановити версію за замовчуванням.
//Open bash profile
open ~/.bash_profile
export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
// run bash profile
source ~/.bash_profile
Якщо ви використовуєте рибу, а ви використовуєте mac і хочете мати можливість перемикатися між JDK, то нижче для мене працює mac.
@ kenglxn відповідь не працює для мене, і я зрозумів, що Bcos не встановив -g, що є глобальним!
Поставте нижче під ~ / .config / fish / 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
Якщо у вас є кілька версій і ви хочете щось запустити за допомогою певної версії, скористайтеся цим прикладом:
/usr/libexec/java_home -v 1.7.0_75 --exec java -jar you-file.jar
На основі відповіді @markhellewell я створив пару функцій псевдоніму, які будуть виконувати це за вас. Просто додайте їх у файл запуску оболонки
#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
Ось як я це роблю на моєму 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
має надрукувати версію 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
jv8
jvd
_E_JAVA_HOME_D
визначеною вище.jv
Приклад виводу:
eric@eric-pc:~$ 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)
eric@eric-pc:~$ jv11
eric@eric-pc:~$ 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)
eric@eric-pc:~$ jvd
eric@eric-pc:~$ 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)
eric@eric-pc:~$
JAVA_HOME
.На моїй машині при ручному встановленні jdk я зберігаю другорядну версію, потім здійснюю м'який зв’язок з основною версією, але без другорядної версії.
напр.
// це фактичний реж,
jdk1.8.0_191
// це м'яке посилання на jdk1.8.0_191
jdk-8
// це м'яке посилання на jdk-8
абоjdk-11
java
Я визначаю псевдонім команди у ~/.bashrc
, але визначаю змінну в окремому файлі.
Я використовую ~/.eric_var
для визначення змінних і ~/.bashrc
буду джерелом (наприклад source $HOME/.eric_var
).
Найпростіший спосіб включити окремо встановлений 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
та ви можете вибрати його, як описано вище.
Я зробив це для місцевого терміналу с
export JAVA_8_HOME=(/Library/Java/JavaVirtualMachines/jdk1.8.0_221.jdk/Contents/Home/)
export JAVA_13_HOME=(/Library/Java/JavaVirtualMachines/jdk-13.0.1.jdk/Contents/Home/)
alias java8='export JAVA_HOME=$JAVA_8_HOME; alias java="$JAVA_8_HOME/bin/java"; $JAVA_8_HOME/bin/java -version'
alias java13='export JAVA_HOME=$JAVA_13_HOME; alias java="$JAVA_13_HOME/bin/java"; $JAVA_13_HOME/bin/java -version'
export JAVA_HOME=$JAVA_13_HOME
Цей інструмент зробить роботу за вас:
http://www.guigarage.com/2013/02/change-java-version-on-mac-os/
Це простий JavaOne, який можна використовувати для визначення поточної версії Java. Версія може використовуватися в оболонці, яка відкривається після того, як в інструменті була обрана версія.
ТАК ЛЕГКО РІШЕННЯ: Який головний біль - це було швидке просте рішення, яке працювало на мене.
Mac OS Sierra Версія 10.12.13
Використовуйте клавіші швидкого доступу: CMD + SHIFT + G - введіть "/ Library /"
Знайдіть папку JAVA
Клацніть правою кнопкою миші папку Java = Перемістити в кошик (необхідний пароль)
Встановити: Java SE Development Kit 8 jdk-8u131-macosx-x64.dmg | Завантажити Javascript SDK
/usr/libexec/java_home
вам каже виконавець ?