升级到 macOS Big Sur v11.0.1 后出现错误的 JAVA_HOME
Posted
技术标签:
【中文标题】升级到 macOS Big Sur v11.0.1 后出现错误的 JAVA_HOME【英文标题】:Wrong JAVA_HOME after upgrade to macOS Big Sur v11.0.1 【发布时间】:2021-03-03 04:18:01 【问题描述】:在我在 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
【问题讨论】:
你可以从JAVA_HOME in Mac找到答案 在我可以访问的任何 Mac 上,我都无法重现此问题。但是我也没有下面提到的/Library/Internet Plug-Ins/JavaAppletPlugin.plugin
。
【参考方案1】:
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
【讨论】:
【参考方案2】:$> /usr/libexec/java_home -v "1.8.0" 如果存在,似乎可以访问确切的 jdk。如果已安装,则忽略“插件”。 这些报价是在互联网上的随机位置推荐的。它们也显示在手册页中。
【讨论】:
【参考方案3】:同意@Konstantin。在 Big Sur 升级后,我遇到了同样的问题。
解决此问题需要遵循的步骤是:
-
取消设置 JAVA_HOME
检查库中的 java_home 指向的内容:/usr/libexec/java_home -v
匹配Java虚拟机(二):
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.8.221 开头,所以默认选择第一个,检查版本
/Library/Java/JavaVirtualMachines/jdk1.8.0_221.jdk/Contents/Home
export JAVA_HOME='/Library/Java/JavaVirtualMachines/jdk1.8.0_221.jdk/Contents/Home'
echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk1.8.0_221.jdk/Contents/Home
【讨论】:
【参考方案4】:我从 18.02.2021 开始拥有 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 只需一分钟即可完成:)
【讨论】:
执行这些步骤后,我现有的终端设置就被吹走了。我不太记得它们是在哪里设置的,但它们现在已经消失了。 为我工作。我也运行过“unset JAVA_HOME ;”在此之前。 非常感谢!! 谢谢,说明很清楚,效果很好。当我的办公室 macbook 更新到 Big Sur 时,我遇到了在 Ionic 中构建 android 应用程序的问题。尽管我的设备有很多限制,但应用此修复不需要特殊权限。再次感谢您。 同样适用于 JDK 11。刚刚测试过了。【参考方案5】:安装 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>
【讨论】:
【参考方案6】:对我来说,https://developer.apple.com/forums/thread/666681 在花了这么多时间解决问题后工作了。
我只是调用以下命令
sudo rm -fr /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin
sudo rm -fr /Library/PreferencePanes/JavaControlPanel.prefpane
【讨论】:
【参考方案7】:正如我所尝试的那样。我只是删除/Library/Internet Plug-Ins/JavaAppletPlugin.plugin
并重新登录。然后一切正常。
【讨论】:
为我工作,谢谢【参考方案8】:对我来说,它完全被打破了。 取消设置 JAVA_HOME,/usr/libexec/java_home 给出:
/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
【讨论】:
这是你 Mac 上的 JVM 之一,默认选中 - 我也有。检查哪些 JVM 可用调用/usr/libexec/java_home -V
,然后获取 JAVA_HOME 以获得您需要调用 /usr/libexec/java_home -v <ver>
的那个。【参考方案9】:
似乎在 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 home(也适用于 -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
【讨论】:
对我来说似乎是一个错误。我想不出任何理由来证明它明显的新行为或决定在每个已经使用其先前行为的人之下改变它。 - 也许有人应该关注这个问题。 请注意,v11.0 中的这种行为变化并非有意为之。它已在 v11.2 中修复,以恢复与JAVA_HOME
的旧行为一致。以上是关于升级到 macOS Big Sur v11.0.1 后出现错误的 JAVA_HOME的主要内容,如果未能解决你的问题,请参考以下文章