无法将 Java 版本切换到 Java 17

Not able to switch the Java version to Java 17

再次发帖,因为有人将我的问题移到了一个没有太多 activity 的社区,那里提供的解决方案 in the comment 没有用。

我已经从 here.

安装了 Amazon Corretto Java 17

但是,我无法将 Java 版本切换到 Java 17.

以下是我已经尝试过的步骤:

1.

export JAVA_HOME=$(`/usr/libexec/java_home -v17`)
  1. export JAVA_HOME=/Library/Java/JavaVirtualMachines/amazon-corretto-17.jdk/Contents/Home
  2. 我还使用以下命令检查了 Java 的最高版本: /usr/libexec/java_home 它显示正确的 Java 17 版本: /Library/Java/JavaVirtualMachines/amazon-corretto-17.jdk/Contents/Home
  3. 我还使用命令 /usr/libexec/java_home -V 检查了我机器上安装的所有 Java 版本,它正确显示 Java 8、11 和 17:
17.0.1 (x86_64) "Amazon.com Inc." - "Amazon Corretto 17" /Library/Java/JavaVirtualMachines/amazon-corretto-17.jdk/Contents/Home

11.0.9.1 (x86_64) "Amazon.com Inc." - "Amazon Corretto 11" /Users/harsh.pamnani/Library/Java/JavaVirtualMachines/corretto-11.0.9.1/Contents/Home

1.8.0_275 (x86_64) "Amazon" - "Amazon Corretto 8" /Library/Java/JavaVirtualMachines/amazon-corretto-8.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/amazon-corretto-17.jdk/Contents/Home
  1. 我还将 step-1step-2 中提到的 JAVA_HOME 导出添加到 .zshrc.bash_profile 中。
  2. 我关注了关于 Whosebug 的多个问题和多个 博客也是如此。例如,

How to set or change the default Java (JDK) version on macOS?

https://java.tutorials24x7.com/blog/how-to-switch-java-version-on-mac

https://www.lotharschulz.info/2019/08/21/mac-change-default-java-version

https://akrabat.com/using-jenv-to-select-java-version-on-macos/

https://www.happycoders.eu/java/how-to-switch-multiple-java-versions-windows/

  1. 我正在使用 jenv 在不同的 java 版本之间切换。即使 jenv 也无法找到 Java 17。我使用了 jenv versions,以下是输出:
system
  1.8
  1.8.0.275
  11
  11.0
* 11.0.9.1 (set by /Users/harsh.pamnani/.jenv/version)
  corretto64-1.8.0.275
  corretto64-11.0.9.1
  1. 我还检查过 JAVA_HOME 指向 Java 17。这是屏幕截图:Screenshot


即使在我执行 java --version 时执行了上述所有步骤,它仍然设置为 Java 11:

openjdk 11.0.9.1 2020-11-04 LTS
OpenJDK Runtime Environment Corretto-11.0.9.12.1 (build 11.0.9.1+12-LTS)
OpenJDK 64-Bit Server VM Corretto-11.0.9.12.1 (build 11.0.9.1+12-LTS, mixed mode)
  1. 我也检查了 PATH 变量,似乎没有什么与 Java 相关。以下是路径变量的输出:
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
/Users/harsh.pamnani/Downloads/apache-maven-3.6.3/bin

如果我遗漏了什么,有人可以帮助我理解吗?谢谢。

which java 通常用于在您键入 java.

时查找您正在调用的确切可执行文件

请记住,当您输入命令 java 时,不会使用您的 JAVA_HOME 设置。相反,使用操作系统 PATH 设置。如果您在要在路径上使用的那个“之前”有一个 java 的旧副本,那么这就是操作系统会给您的。要解决这样的问题,您需要更改路径,使所需 java 版本的目录位于任何其他 java 版本之前。

我确实看到您检查了 PATH 设置,但我认为您不知道要检查什么,因为您只列出了目录。在这些目录中,存在 java 可执行文件。如果旧的可执行文件位于路径中较早的目录中,那么无论任何其他设置如何,这就是 java 从命令行 运行 时您将获得的版本。

现在,正确设置 JAVA_HOME 仍然很重要,因为当各种 Java 工具想要发现项目时,您可能会读取 JAVA_HOME(如果它是错误的,被定向到一个不匹配的 JVM)。