java -version does not change



我在用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:

  1. echo $PATH并复制它的值
  2. export PATH=""
  3. 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)

最新更新