[英]change java version in macOS BigSur
我无法在 macOS BigSur 中更改 java 版本。 我有以下版本:
当我执行这个命令时
/usr/libexec/java_home -V
我有以下版本:
Matching Java Virtual Machines (3):
11.0.8 (x86_64) "Oracle Corporation" - "Java SE 11.0.8" /Library/Java/JavaVirtualMachines/jdk-11.0.8.jdk/Contents/Home
1.8.261.12 (x86_64) "Oracle Corporation" - "Java" /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
1.8.0_261 (x86_64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_261.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/jdk-11.0.8.jdk/Contents/Home
我想切换到默认的 java 1.8,所以我执行这个命令:
export JAVA_HOME=/usr/libexec/java_home -v 1.8.0_261
然后当我检查 java 版本时:
java -version
我还有旧的(更高的)
java version "11.0.8" 2020-07-14 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.8+10-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.8+10-LTS, mixed mode)
为什么它不起作用?
请使用以下命令:-
export JAVA_HOME=`/usr/libexec/java_home -v 1.8.0_261`
您必须取消设置 JAVA_HOME 并设置 JAVA_VERSION 然后它才能工作。
~% JAVA_VERSION=12 java -version
openjdk version "14.0.2" 2020-07-14
~% export JAVA_VERSION=12
~% java -version
openjdk version "14.0.2" 2020-07-14
~% unset JAVA_HOME
~% java -version
java version "12.0.1" 2019-04-16
~% JAVA_VERSION=13 java -version
java version "13-ea" 2019-09-17
或者如果你需要设置 JAVA_HOME 你需要在调用/usr/libexec/java_home
之前取消设置
function jav {
unset JAVA_HOME
export JAVA_HOME=`/usr/libexec/java_home -v $@`
}
~% jav 12
~% java -version
java version "12.0.1" 2019-04-16
~% jav 13
~% java -version
java version "13-ea" 2019-09-17
现在/usr/bin/java
有了新的二进制文件,它的优先级高于$JAVA_HOME/bin/java
将 macOS 升级到 Big Sur 后,我今天一直对同样的问题感到困惑。
我的 Mac 上有两个 JDK,Oracle JDK 11 和 Oracle JDK 8。
然后/usr/libexec/java_home
总是返回/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
并忽略其他参数,如-v 1.8
经过一些测试,我发现只有当您的 Mac 具有 Oracle JDK 1.8.X 版本时才会发生这种情况。
所以我删除了Oracle JDK 1.8.x, /usr/libexec/java_home
可以返回正确的JDK 11 路径。
然后我尝试了AdoptOpenJDK 8, /usr/libexec/java_home
可以正确返回其路径,但是忽略-v 11
arg,无法获取JDK 11 的路径。
java_home
命令中似乎存在一些错误,如果您的 Mac 上只有一个 JDK - 除了 Oracle JDK 8 - 它应该可以正常工作。 如果您有多个 JDK,它可能只返回最后安装的 JDK 路径。
因此,要么只保留一个 JDK 安装,要么使用绝对路径设置$JAVA_HOME
env 就可以了。
我在我的 .zshenv 上添加了以下内容,并且工作正常。 谢谢木南。
## Java home
export JAVA_8_HOME=$(/usr/libexec/java_home -v1.8)
export JAVA_11_HOME=$(/usr/libexec/java_home -v11)
## Java alias
alias java8='export JAVA_VERSION=1.8'
alias java11='export JAVA_VERSION=11'
要从控制台更改 java 版本,请使用:java8 或 java11
在我看来,命令"/usr/libexec/java_home -v"
不起作用。 我解决了直接导出文件 .bash_profile 中的 java 路径:
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_271.jdk/Contents/Home
然后执行命令:
source .bash_profile.
在此之后使用命令:echo $JAVA_HOME 我已经看到 JVM 路径设置正确。
当你安装一个openjdk版本时(除了系统/默认安装的),例如:
brew install openjdk@11
(至少就我而言)默认情况下它没有链接到正确的位置。 您需要按照此处概述的方式对其进行符号链接
sudo ln -sfn /opt/homebrew/opt/openjdk@11/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-11.jdk
这样当您运行/usr/libexec/java_home -V
时,您将看到所有已安装的版本
Matching Java Virtual Machines (2):
19.0.1 (arm64) "Homebrew" - "OpenJDK 19.0.1" /opt/homebrew/Cellar/openjdk/19.0.1/libexec/openjdk.jdk/Contents/Home
11.0.18 (arm64) "Homebrew" - "OpenJDK 11.0.18" /opt/homebrew/Cellar/openjdk@11/11.0.18/libexec/openjdk.jdk/Contents/Home
选择正确的就像设置环境变量$JAVA_HOME
一样简单
export JAVA_HOME=`/usr/libexec/java_home -v 11` # to set to java 11, for eg
运行java --version
确认:
openjdk 11.0.18 2023-01-17
OpenJDK Runtime Environment Homebrew (build 11.0.18+0)
OpenJDK 64-Bit Server VM Homebrew (build 11.0.18+0, mixed mode)
我按照以下步骤解决了在 macOS BigSur 中设置我需要的 java 版本的问题。 :
当我执行这个命令时
/usr/libexec/java_home -V
我有以下版本:
Matching Java Virtual Machines (3):
17 (x86_64) "Homebrew" - "OpenJDK 17" /usr/local/Cellar/openjdk/17/libexec/openjdk.jdk/Contents/Home
11.0.17.0-m1 (x86_64) "IBM Corporation" - "IBM Semeru Runtime Open Edition 11" /Users/airasia/Library/Java/JavaVirtualMachines/semeru-11.0.17/Contents/Home
1.8.0_292 (x86_64) "AdoptOpenJDK" - "AdoptOpenJDK 8" /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
/usr/local/Cellar/openjdk/17/libexec/openjdk.jdk/Contents/Home
然后,我想切换到默认的 java 1.8,所以我执行了这个命令:
echo 'export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)' >> ~/.profile
然后当我检查 java 版本时:
java --version
我还在得到旧的(更高的)
openjdk 17 2021-09-14
OpenJDK Runtime Environment Homebrew (build 17+0)
OpenJDK 64-Bit Server VM Homebrew (build 17+0, mixed mode, sharing)
~/.profile
文件看起来像,
vim ~/.profile
export JAVA_HOME=/usr/local/opt/openjdk/bin
export PATH=$JAVA_HOME/bin:$PATH
然后我检查了
set | grep JAVA
JAVA_HOME=JAVA_HOME=/usr/local/Cellar/openjdk/17/libexec/openjdk.jdk/Contents/Home
然后我在~/.profile
文件中添加了新的JAVA_HOME
,
vim ~/.profile
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
export PATH=$JAVA_HOME/bin:$PATH
并执行它,
source ~/.profile
现在 java 指向1.8.0_292
,
java -version
openjdk version "1.8.0_292"
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_292-b10)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.292-b10, mixed mode)
要再次回openjdk 17
,我只需要删除一行,
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
并添加,
export JAVA_HOME=/usr/local/opt/openjdk/bin
并执行它,
source ~/.profile
我也是,太烦人了,给我添麻烦了。 他似乎是通过设置'$JAVA_VERSION'来解决的。 请使用以下命令:-
export JAVA_VERSION=11
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.