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

新手上路,请多包涵

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

原文由 Konstantin 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 441
2 个回答

在 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

原文由 Konstantin 发布,翻译遵循 CC BY-SA 4.0 许可协议

我从 2021 年 2 月 18 日开始使用 Big Sur 11.2.1。我对 JAVA_HOME 路径配置有同样的问题。阅读了大量信息后,我解决了下一个问题:

安装 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 只需一分钟即可完成:)

原文由 yozhik 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题