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