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

标签 java macos java-home macos-big-sur

在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
%
解决方案是在执行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

关于java - 升级到macOS Big Sur v11.0.1后的JAVA_HOME错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64917779/

相关文章:

java - Apache2 代理 WebSocket 连接?

java - 如何比较Arraylist中不同数组中的两个元素?

c++ - 什么是基于 >MACHINE< 的好 PPC 用于为顺序处理器分析代码

macos - 为什么这个简单的 AppleScript 不起作用?

java - 为不可变类实现 clone()

Java:从另一个类导入字符串数组

macos - 如何更新交付的 NSUserNotification 中的副标题?

java - 如何在 Java 中获取 JAVA_HOME 和 CATALINA_HOME 环境变量?

Docker Jenkins - 自动安装的 Maven + Open Java 无法协同工作

bash - 如何在 macOS 上设置 JAVA_HOME 环境变量?