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

Kon*_*tin 32 java macos java-home macos-big-sur

在我在 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
Run Code Online (Sandbox Code Playgroud)

Kon*_*tin 50

似乎在 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
Run Code Online (Sandbox Code Playgroud)

此外,我注意到它不报告任何内容,如果JAVA_HOME设置,但不指向有效的 Java 主页(也为-V):

% JAVA_HOME=dummy /usr/libexec/java_home -v 1.7.0_45
% JAVA_HOME=dummy /usr/libexec/java_home -V
%
Run Code Online (Sandbox Code Playgroud)

解决方案是确保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
Run Code Online (Sandbox Code Playgroud)

  • 对我来说似乎是一个错误。我认为没有任何理由可以证明其明显的新行为或决定从每个已经使用其先前行为的人中改变它。- 也许有人应该雷达这个问题。 (2认同)
  • 请注意,v11.0 中的行为更改并非有意为之。它在 v11.2 中得到修复,以恢复与“JAVA_HOME”的旧行为一致。 (2认同)

yoz*_*hik 36

我从 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)
Run Code Online (Sandbox Code Playgroud)

检查您的机器上已经安装了哪些版本的 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
Run Code Online (Sandbox Code Playgroud)

只获取您需要的一项:

/usr/libexec/java_home -v 1.8.0_281
/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home
Run Code Online (Sandbox Code Playgroud)

在 Catalina 和 Big Sur - 有 Z-shell ,要添加 JAVA_HOME 等环境变量,有两个文件:~/.zshenv 和 ~/.zshrc,我无法让它与第一个一起工作。它对我来说是这样的:

nano ~/.zshrc
Run Code Online (Sandbox Code Playgroud)

将此行添加到该文件中:

export JAVA_HOME=$(/usr/libexec/java_home -v 1.8.0_281)
Run Code Online (Sandbox Code Playgroud)

按 Ctrl+X 并保存更改。

然后运行命令将更改应用到当前终端:

source ~/.zshrc
Run Code Online (Sandbox Code Playgroud)

之后,您可以检查一切是否与命令一起工作:

echo $JAVA_HOME
it will print you: /Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home
Run Code Online (Sandbox Code Playgroud)

重新启动将使用 JAVA_HOME 变量的终端和程序。对我来说是 Android Studio。现在一切正常。我是 Mac OS 的新手,我花了 4 个小时来解决这个问题。使用 Windows 只需一分钟即可完成:)

  • 遵循这些步骤会破坏我现有的终端设置。我不太记得它们被设置在哪里,但它们现在已经消失了。 (2认同)

lan*_*ung 23

正如我尝试的那样。我只是删除/Library/Internet Plug-Ins/JavaAppletPlugin.plugin并重新登录。然后一切正常。

  • 对我有用,谢谢 (4认同)

小智 8

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

我只是调用以下命令

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

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