Неправильный JAVA_HOME после обновления до macOS Big Sur v11.0.1

В моей настройке на macOS я работаю с несколькими JDK, переключаясь между ними с помощью инструмента /usr/libexec/java_home, аналогично методу, описанному в этот ответ SO

После обновления до macOS Big Sur v11.0.1 моя настройка JAVA_HOME перестала работать, всегда сообщая одну и ту же версию java:

% /usr/libexec/java_home -V
Matching Java Virtual Machines (5):
    11.0.8 (x86_64) "AdoptOpenJDK" - "AdoptOpenJDK 11" /Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home
    1.8.162.12 (x86_64) "Oracle Corporation" - "Java" /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
    1.8.0_162 (x86_64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home
    1.8.0_45 (x86_64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home
    1.7.0_45 (x86_64) "Oracle Corporation" - "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home

% /usr/libexec/java_home -v 1.8.162.12
/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home

% /usr/libexec/java_home -v 1.7.0_45
/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home

person Konstantin    schedule 19.11.2020    source источник
comment
Вы можете найти ответы в JAVA_HOME на Mac   -  person Milovan Tomašević    schedule 15.12.2020
comment
Я вообще не могу воспроизвести эту проблему ни на одном из компьютеров Mac, к которым у меня есть доступ. Но у меня также нет /Library/Internet Plug-Ins/JavaAppletPlugin.plugin, упомянутого ниже, ни на одном из них.   -  person lenborje    schedule 09.04.2021


Ответы (8)


Похоже, в macOS Big Sur v11.0.1 поведение команды /usr/libexec/java_home -v ... изменилось: она чувствительна к ранее установленному значению переменной среды JAVA_HOME.

Точное поведение неясно, я не смог найти никакой документации по этому поводу, но в моих экспериментах он сообщил о версии, уже установленной в JAVA_HOME, независимо от переключателя -v:

% JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home /usr/libexec/java_home -v 1.8.0_162
/Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home

Кроме того, я заметил, что он ничего не сообщает, если установлен JAVA_HOME, но не указывает на действительный домашний Java (также для -V):

% JAVA_HOME=dummy /usr/libexec/java_home -v 1.7.0_45
% JAVA_HOME=dummy /usr/libexec/java_home -V
%

Решение состоит в том, чтобы убедиться, что JAVA_HOME не установлен перед выполнением /usr/libexec/java_home:

% unset JAVA_HOME ; /usr/libexec/java_home -v 1.8.0_162
/Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home
person Konstantin    schedule 19.11.2020
comment
Мне кажется, что это ошибка. Я не могу придумать никакого оправдания ни его очевидному новому поведению, ни решению изменить его из-под всех, уже использующих его предыдущее поведение. - Может, кому-то стоит радара эту проблему. - person CryptoFool; 19.11.2020
comment
Обратите внимание, что это изменение поведения в версии 11.0 не было преднамеренным. Это было исправлено в v11.2, чтобы вернуться в соответствие со старым поведением для JAVA_HOME. - person Jeremy Huddleston Sequoia; 24.06.2021

У меня Big Sur 11.2.1 от 18.02.2021. У меня была такая же проблема с конфигурацией пути JAVA_HOME. Прочитав много информации, я решил свою проблему следующим образом:

Установите JDK 8: https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html Java SE Development Kit 8u281

Установите его как обычно на MacOS Big Sur.

Проверьте версию JDK:

java -version
java version "1.8.0_281"
Java(TM) SE Runtime Environment (build 1.8.0_281-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.281-b09, mixed mode)

Проверьте, какие версии JDK уже установлены на вашем компьютере:

/usr/libexec/java_home -V 
Matching Java Virtual Machines (2):
    1.8.281.09 (x86_64) "Oracle Corporation" - "Java" /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
    1.8.0_281 (x86_64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home
/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home

Получите только то, что вам нужно:

/usr/libexec/java_home -v 1.8.0_281
/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home

На Catalina и Big Sur есть Z-shell, чтобы добавить переменные окружения, такие как JAVA_HOME, для этого есть два файла: ~ / .zshenv и ~ / .zshrc, я не смог заставить его работать с первым. У меня это сработало так:

nano ~/.zshrc

Добавьте в этот файл эту строку:

export JAVA_HOME=$(/usr/libexec/java_home -v 1.8.0_281)

Нажмите Ctrl + X и сохраните изменения.

Затем запустите команду, чтобы применить эти изменения к текущему терминалу:

source ~/.zshrc

После этого вы можете проверить, все ли работает, командой:

echo $JAVA_HOME
it will print you: /Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home

Перезагрузите терминал и программы, которые будут использовать переменную JAVA_HOME. Для меня это была Android Studio. Теперь все работает нормально. Я новичок в Mac OS, и мне потребовалось 4 часа, чтобы решить эту проблему. В Windows это делается за минуту :)

person yozhik    schedule 18.02.2021
comment
Следуя этим шагам, я уничтожил существующие настройки терминала. Я не совсем помню, где они были установлены, но теперь их нет. - person fobbymaster; 24.05.2021
comment
Работал у меня. Я также запустил unset JAVA_HOME; перед этим. - person rahulxyz; 25.05.2021

Как я старался. Я просто удаляю /Library/Internet Plug-Ins/JavaAppletPlugin.plugin и снова вхожу в систему. Дальше все работает нормально.

person landerlyoung    schedule 16.12.2020
comment
У меня работает, спасибо - person Anil Kumar Ram; 12.02.2021

Для меня https://developer.apple.com/forums/thread/666681 работал после тратить так много времени на решения.

Я просто вызываю следующие команды

sudo rm -fr / Library / Internet \ Plug-Ins / JavaAppletPlugin.plugin

sudo rm -fr /Library/PreferencePanes/JavaControlPanel.prefpane

person Muditha sumanathunga    schedule 19.01.2021

Возникла эта проблема после установки Big Sur.

Сначала я начал удалять весь JDK из системы с помощью:

sudo rm -rf /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin  
sudo rm -rf /Library/PreferencePanes/JavaControlPanel.prefPane  
sudo rm -rf /Library/Application\ Support/Oracle/Java/ 
sudo rm -rf /Library/Java/JavaVirtualMachines 

Затем я установил JDK, который собираюсь использовать:

brew tap AdoptOpenJDK/openjdk
brew install --cask adoptopenjdk<version>
person jordiburgos    schedule 25.01.2021

Для меня это полностью сломано. Отключение JAVA_HOME, / usr / libexec / java_home дает:

/ Библиотека / Интернет-плагины / JavaAppletPlugin.plugin / Содержание / Главная

person Philip    schedule 10.12.2020
comment
Это одна из JVM на вашем Mac, выбранная по умолчанию - у меня тоже есть такая же. Проверьте, какие JVM доступны для вызова /usr/libexec/java_home -V, а затем получите JAVA_HOME для той, которая вам нужна для вызова /usr/libexec/java_home -v <ver>. - person Konstantin; 12.12.2020

$ ›/ Usr / libexec / java_home -v 1.8.0, похоже, обращается к точному jdk, если он присутствует. Игнорирует «плагин», если он установлен. Цитаты рекомендовали в случайных местах в Интернете. Они также показаны на странице руководства.

person mismo    schedule 06.07.2021

Согласитесь с @Konstantin. Я столкнулся с той же проблемой после обновления Big Sur.

Чтобы исправить это, вам необходимо выполнить следующие действия:

  1. отключить JAVA_HOME
  2. проверьте, на что указывает java_home в библиотеке: / usr / libexec / java_home -v

Соответствие виртуальным машинам Java (2):

1.8.221.11 (x86_64) "Oracle Corporation" - "Java" /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home

1.8.0_221 (x86_64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_221.jdk/Contents/Home
  1. Поскольку обе версии начинаются с 1.8.221, поэтому по умолчанию выбирается первая, проверьте версию

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

  1. export JAVA_HOME='/Library/Java/JavaVirtualMachines/jdk1.8.0_221.jdk/Contents/Home'
  2. echo $JAVA_HOME

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

person partha    schedule 07.06.2021