我在用zsh改变在Mac上运行Big Sur 11.2的java版本时有麻烦。我想将Java 1.8设置为默认值,所以我使用以下命令来设置JAVA_HOME:
$ unset JAVA_HOME
$ export JAVA_HOME=$(/usr/libexec/java_home -v "1.8.0_281")
$ echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home
然而,当我运行java -version
时,我一直得到JDK 15作为当前的默认值。然后我从JavaVirtualMachines目录中删除jdk15,并重复JAVA_HOME的设置,但我仍然观察到相同的结果。
到目前为止,其他答案都是关于$PATH的。这是转移注意力;/usr/bin/java
在路径上,它应该保持在路径上,并且它是一个轻包装器,用于您实际选择的java安装。
推荐的策略是只使用工具来为您解决这个问题,例如jEnv。如果有的话,可以通过brew安装,否则,请按照网站上的说明进行安装。
如果您不想遵循使用jEnv的既定路线,那么不推荐使用JAVA_HOME。/usr/bin/java
将使用/usr/libexec/java_home
的默认滚出。java_home将遵从java_home(环境变量)的指示;只有当它被取消设置时,它才会给你自己的默认值,这个默认值通常是最新安装的,否则很难更改。
它不适合你的事实表明你有一些不同类型的shell,或者java版本没有被java_home
列出,或者你以一些非常激烈的方式与PATH混淆(将涉及从你的mac磁盘中删除安全控制等),所以我怀疑这就是它-仔细检查你到目前为止所做的?你用的是哪个mac版本?
来自mac的示例:
/usr/libexec/java_home
> /Library/Java/JavaVirtualMachines/adoptopenjdk-14.jdk/Contents/Home
java -version
> openjdk version "14.0.1" 2020-04-14
/usr/libexec/java_home -v 1.8
> /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
export JAVA_HOME=/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
/usr/libexec/java_home
> /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
java -version
> openjdk version "1.8.0_252"
您应该确保正确的java版本路径在您的path环境变量
中首先出现TLDR:
echo $PATH
并复制它的值export PATH=""
export PATH="/path/from/step1/with/java/removed"
结束TLDR
有同样的问题与大苏尔当我试图切换到java 11
,尽管一切指向正确的值,java -version
总是返回java 8
$ 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)
$ whereis java
/usr/bin/java
$ /usr/bin/java -version
openjdk version "11.0.11" 2021-04-20
OpenJDK Runtime Environment AdoptOpenJDK-11.0.11+9 (build 11.0.11+9)
OpenJDK 64-Bit Server VM AdoptOpenJDK-11.0.11+9 (build 11.0.11+9, mixed mode)
$ echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home
$ 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)
$ which java
/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/bin/java
要修复,我必须使用上面的TLDR步骤从PATH
中删除Java SDK
$ echo $PATH
/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/munki:/opt/X11/bin:/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home/bin:/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/bin:/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home/bin
$ export PATH=""
direnv: error can't find bash: exec: "bash": executable file not found in $PATH
$ export PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/munki:/opt/X11/bin"
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/munki:/opt/X11/bin
后来
$ java -version
openjdk version "11.0.11" 2021-04-20
OpenJDK Runtime Environment AdoptOpenJDK-11.0.11+9 (build 11.0.11+9)
OpenJDK 64-Bit Server VM AdoptOpenJDK-11.0.11+9 (build 11.0.11+9, mixed mode)