简体   繁体   English

java -版本不变

[英]java -version does not change

I am having trouble changing the version of java running on my Mac running Big Sur 11.2 with zsh.我在使用 zsh 运行 Big Sur 11.2 的 Mac 上更改 java 的版本时遇到问题。 I want to set Java 1.8 as my default, so I used the following commands to set JAVA_HOME:我想将 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

However, when I ran java -version I kept getting JDK 15 as the current default.但是,当我运行java -version时,我一直将 JDK 15 作为当前默认值。 I then removed jdk15 from the JavaVirtualMachines directory and repeated the setting of JAVA_HOME, but I continue to observe the same result.然后我从 JavaVirtualMachines 目录中删除了 jdk15 并重复了 JAVA_HOME 的设置,但我继续观察到相同的结果。

Other answers so far are talking about $PATH.到目前为止,其他答案都在谈论 $PATH。 This is a red herring;这是一条红鲱鱼; /usr/bin/java is on the path, it should remain on the path, and it is a light wrapper that goes to your actual, selected java installation. /usr/bin/java在路径上,它应该保留在路径上,它是一个轻包装器,用于您实际选择的 java 安装。

The recommended strategy is to just use tools to solve this problem for you, such as jEnv .推荐的策略是只使用工具来为您解决这个问题,例如jEnv Install it via brew if you have it, otherwise, follow instructions on the site.如果有,请通过 brew 安装它,否则,请按照网站上的说明进行操作。

If you don't want to go the established route of using jEnv, the not-recommended route is, indeed, to mess with JAVA_HOME.如果您不想 go 使用 jEnv 的既定路线,那么不推荐的路线确实是与 JAVA_HOME 混淆。 /usr/bin/java will use whatever default rolls out of /usr/libexec/java_home . /usr/bin/java将使用/usr/libexec/java_home的任何默认值。 java_home will defer to what JAVA_HOME (the environment variable) says; java_home 将遵循 JAVA_HOME(环境变量)所说的内容; only if it is unset will it give you its own default, which is generally the latest installed and very hard to change otherwise.只有未设置它才会为您提供自己的默认值,这通常是最新安装的,否则很难更改。

The fact that it isn't working for you suggests you have some different kind of shell, or that java version isn't listed by java_home , or you've messed with PATH in some very drastic ways (would involve removing security control from your mac disk and such), so I doubt that's it - doublecheck what you've done so far?它不适合您的事实表明您有一些不同类型的 shell,或者java_home没有列出 java 版本,或者您以一些非常激烈的方式弄乱了 PATH(将涉及从您的mac 磁盘等),所以我怀疑就是这样 - 仔细检查你到目前为止做了什么? Which mac version are you on?你用的是哪个mac版本?

An example from a 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"

TLDR: TLDR:

  1. echo $PATH and copy it's value echo $PATH并复制它的值
  2. export PATH=""
  3. export PATH="/path/from/step1/with/java/removed"

End TLDR结束 TLDR

Had the same issue with Big Sur when I tried to switch to java 11 , despite everything pointing to correct values, java -version always returned java 8当我尝试切换到java 11时,Big Sur 遇到了同样的问题,尽管一切都指向正确的值, 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

To fix I had to remove Java SDK from PATH using steps in TLDR above要修复,我必须使用上述 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

Afterwards然后

$ 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)

You should ensure that the right java version path come first in your PATH environmental variable您应该确保正确的 java 版本路径在您的 PATH 环境变量中排在第一位

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM