Невозможно изменить JDK в Mac OS с помощью Jenv
Я использую Amazon corretto JDK, и раньше в моей Mac OS было установлено только 1.8, вчера я установил Amazon corretto JDK 11 с помощью установщика пакетов Mac OS, и после этого он изменил мою версию java по умолчанию на 11.
Я следил за блогом со средним рейтингом на Jenv, чтобы управлять несколькими версиями в Mac OS, но по-прежнему моя версия java по умолчанию не переключается на 1.8 и не получал никаких ошибок, следуя ответу stackru или средней публикации.
команда с использованием Jenv
версии jenv
system
1.8
* 1.8.0.252 (set by /Users/my user/.jenv/version) // note `*` that should tell the current version IMO
11
11.0
11.0.7
corretto64-1.8.0.252
corretto64-11.0.7
выход java -version
java --version openjdk 11.0.7 2020-04-14 LTS OpenJDK Runtime Environment Corretto-11.0.7.10.1 (сборка 11.0.7+10-LTS) OpenJDK 64-разрядная серверная виртуальная машина Corretto-11.0.7.10.1 (сборка 11.0.7+10-LTS, смешанный режим)
Примечание: у меня есть несколько приложений, которые использовали разные версии JDK, и я не хочу использовать псевдоним для управления версией JDK, меня интересует Jenv, где я могу установить свою версию JDK глобально (1.8 в моем случае) и локально (на основе конкретного приложения JDK).
2 ответа
Проблема, которую вы видите, заключается в том, что jenv неправильно настроен для вашего терминала. В зависимости от вашего терминала вы должны посмотреть свой.bash_profile или.zshrc и убедиться, что существуют следующие строки:
export PATH="$HOME/.jenv/bin:$PATH"
eval "$(jenv init -)"
Вы можете проверить, правильно ли инициализирован jenv в вашем терминале, запустив
which java
. Если jenv инициализирован правильно, вы увидите что-то вроде:
/Users/your-username/.jenv/shims/java
Если вы этого не видите, дважды проверьте.bash_profile или.zshrc, как описано выше. Я также рекомендую вам разместить их в конце файла, чтобы вы могли быть уверены, что jenv будет добавлен в начало вашего PATH.
Магия jenv заключается в
jenv init
. Когда вы открываете свой терминал, он запускает и обновляет ваш PATH, чтобы посмотреть на ~/.jenv/shims, который содержит прокладку (сценарий оболочки), которая разрешает желаемую версию Java при запуске
java
или другие команды JRE/JDK.
Попробуйте добавить это в свой.bash_profile,.zshrc или.bashrc, что имеет отношение к вашей macOS.
jdk() {
version=$1
export JAVA_HOME=$(/usr/libexec/java_home -v"$version");
java -version
}
Затем перезапустите терминал, и вы сможете переключать версии Java, например:
- jdk 1.8
- jdk 11
За кулисами jenv использует каталог /Library/Java/JavaVirtualMachines.
Затем вы также можете ввести /usr/libexec/java_home -V
чтобы показать все доступные JDK и проанализировать вашу проблему:
Matching Java Virtual Machines (4):
11.0.2_2-OracleJDK, x86_64: "Java SE 11.0.2" /Library/Java/JavaVirtualMachines/OracleJDK-jdk-11.0.2.jdk/Contents/Home
11.0.2_1-OpenJDK, x86_64: "OpenJDK 11.0.2" /Library/Java/JavaVirtualMachines/OpenJDK-jdk-11.0.2.jdk/Contents/Home
1.8.0_11, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home
1.7.0_45, x86_64: "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/OracleJDK-jdk-11.0.2.jdk/Contents/Home
В этом примере export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
установить версию JDK 1.8.
Таким образом, вы даже можете определить следующие псевдонимы:
java11_OpenJDK_export='export JAVA_HOME=$(/usr/libexec/java_home -v 11.0.2_1-OpenJDK)'
java11_OracleJDK_export='export JAVA_HOME=$(/usr/libexec/java_home -v 11.0.2_2-OracleJDK)'
java7_export='export JAVA_HOME=$(/usr/libexec/java_home -v 1.7)'
java8_export='export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)'
NB: версия для использования послеjava_home -v
определяется в каждой установке JDK в разделе JVMVersion файла Contents / Info.plist.
Я изменил его, чтобы легко переключаться между OpenJDK и Oracle JDK:
$ tail -5 /Library/Java/JavaVirtualMachines/OpenJDK-jdk-11.0.2.jdk/Contents/Info.plist | head -2
<key>JVMVersion</key>
<string>11.0.2_1-OpenJDK</string>
$ tail -5 /Library/Java/JavaVirtualMachines/OracleJDK-jdk-11.0.2.jdk/Contents/Info.plist | head -2
<key>JVMVersion</key>
<string>11.0.2_2-OracleJDK</string>
Итак, в вашем случае у вас есть две версии 1.8 (1.8 и 1.8.0.252). Более чем вероятно, что вам следует обновить их раздел JVMVersion в файле Contents / Info.plist.