错误 JAVA_HOME 升级到 macOS Big Sur v11.0.1 后
Wrong JAVA_HOME after upgrade to macOS Big Sur v11.0.1
在我的 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
%
解决方案是在执行 /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
对我来说,它完全崩溃了。
取消设置 JAVA_HOME、/usr/libexec/java_home 会得到:
/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
如我所愿。我只是删除 /Library/Internet Plug-Ins/JavaAppletPlugin.plugin
并重新登录。然后一切正常。
对我来说 https://developer.apple.com/forums/thread/666681 在花了很多时间在解决方案上之后工作了。
我只是调用以下命令
sudo rm -fr /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin
sudo rm -fr /Library/PreferencePanes/JavaControlPanel.prefpane
安装 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>
我从 2021 年 2 月 18 日开始使用 Big Sur 11.2.1。 JAVA_HOME 路径配置也有同样的问题。在阅读了很多信息后,我用 next:
解决了我的问题
安装 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 一分钟搞定:)
同意@Konstantin。我在 Big Sur 升级后遇到了同样的问题。
解决此问题需要遵循的步骤是:
- 取消设置JAVA_HOME
- 检查库中 java_home 指向的内容:/usr/libexec/java_home -v
Matching Java Virtual Machines (2):
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
$> /usr/libexec/java_home -v "1.8.0"
似乎可以访问确切的 jdk(如果存在)。如果已安装,请忽略 'plugin'。
这些引述是在互联网上随机推荐的。它们也显示在手册页中。
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
我的解决方案是为您的 JDK 文件创建一个 link。显然,Teradata studio 走错了路
sudo ln -s /Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home/jre/lib/server/libjvm.dylib /Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home/lib/libserver.dylib
在我的 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
%
解决方案是在执行 /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
对我来说,它完全崩溃了。 取消设置 JAVA_HOME、/usr/libexec/java_home 会得到:
/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
如我所愿。我只是删除 /Library/Internet Plug-Ins/JavaAppletPlugin.plugin
并重新登录。然后一切正常。
对我来说 https://developer.apple.com/forums/thread/666681 在花了很多时间在解决方案上之后工作了。
我只是调用以下命令
sudo rm -fr /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin
sudo rm -fr /Library/PreferencePanes/JavaControlPanel.prefpane
安装 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>
我从 2021 年 2 月 18 日开始使用 Big Sur 11.2.1。 JAVA_HOME 路径配置也有同样的问题。在阅读了很多信息后,我用 next:
解决了我的问题安装 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 一分钟搞定:)
同意@Konstantin。我在 Big Sur 升级后遇到了同样的问题。
解决此问题需要遵循的步骤是:
- 取消设置JAVA_HOME
- 检查库中 java_home 指向的内容:/usr/libexec/java_home -v
Matching Java Virtual Machines (2):
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
$> /usr/libexec/java_home -v "1.8.0" 似乎可以访问确切的 jdk(如果存在)。如果已安装,请忽略 'plugin'。 这些引述是在互联网上随机推荐的。它们也显示在手册页中。
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
我的解决方案是为您的 JDK 文件创建一个 link。显然,Teradata studio 走错了路 sudo ln -s /Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home/jre/lib/server/libjvm.dylib /Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home/lib/libserver.dylib