Невозможно изменить 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.

Другие вопросы по тегам