错误 JAVA_HOME 升级到 macOS Big Sur v11.0.1 后

Wrong JAVA_HOME after upgrade to macOS Big Sur v11.0.1

在我的 macOS 设置中,我使用了多个 JDK,通过 /usr/libexec/java_home 工具在它们之间切换,类似于 this SO answer

中描述的方法

升级到 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

在 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
%

解决方案是在执行 /usr/libexec/java_home:

之前确保 JAVA_HOME 而不是
% unset JAVA_HOME ; /usr/libexec/java_home -v 1.8.0_162
/Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home

对我来说,它完全崩溃了。 取消设置 JAVA_HOME、/usr/libexec/java_home 会得到:

/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home

如我所愿。我只是删除 /Library/Internet Plug-Ins/JavaAppletPlugin.plugin 并重新登录。然后一切正常。

对我来说 https://developer.apple.com/forums/thread/666681 在花了很多时间在解决方案上之后工作了。

我只是调用以下命令

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

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

安装 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>

我从 2021 年 2 月 18 日开始使用 Big Sur 11.2.1。 JAVA_HOME 路径配置也有同样的问题。在阅读了很多信息后,我用 next:

解决了我的问题

安装 JDK 8: https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html Java SE 开发套件 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 一分钟搞定:)

同意@Konstantin。我在 Big Sur 升级后遇到了同样的问题。

解决此问题需要遵循的步骤是:

  1. 取消设置JAVA_HOME
  2. 检查库中 java_home 指向的内容:/usr/libexec/java_home -v

Matching Java Virtual Machines (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

$> /usr/libexec/java_home -v "1.8.0" 似乎可以访问确切的 jdk(如果存在)。如果已安装,请忽略 'plugin'。 这些引述是在互联网上随机推荐的。它们也显示在手册页中。

macOS 中的 /usr/libexec/java_home 工具将为您提供安装的最新 Java 版本的位置。从终端调用它以获得类似于以下内容的响应:

/Library/Java/JavaVirtualMachines/jdk-17.0.1.jdk/Contents/Home

导航到根目录并打开 .zprofile 文件。

cd ~
open .zprofile

如果找不到该文件,请使用 echo > .zprofile 命令创建一个。

使用 open .zprofile 打开文件。这应该在文本编辑器中打开它。

/usr/libexec/java_home 工具的响应添加到文件中,如下所示:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-17.0.1.jdk/Contents/Home

我的解决方案是为您的 JDK 文件创建一个 link。显然,Teradata studio 走错了路 sudo ln -s /Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home/jre/lib/server/libjvm.dylib /Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home/lib/libserver.dylib