【问题标题】:How to get MacOS (Catalina) to use custom Java version?如何让 MacOS (Catalina) 使用自定义 Java 版本?
【发布时间】:2021-03-22 09:58:40
【问题描述】:

我正在尝试将我机器上的默认 Java 版本从版本 15(即 openjdk 15.0.1)更改为版本 11(即 openjdk 版本 11.0.2)。我遵循了在线提供的各种解决方案,但归根结底,我只想要以下结果:

$ java --version
openjdk 11.0.9 2020-10-20
OpenJDK Runtime Environment (build 11.0.9+9)
OpenJDK 64-Bit Server VM (build 11.0.9+9, mixed mode, sharing)

但相反,我得到:

$ java --version
openjdk 15.0.1 2020-10-20
OpenJDK Runtime Environment (build 15.0.1+9)
OpenJDK 64-Bit Server VM (build 15.0.1+9, mixed mode, sharing)

我发现的大多数解决方案都建议为我的JAVA HOME 环境变量(内联和.bash_profile)设置一个新值,截至目前,我有:

$ echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk-11.0.9.jdk/Contents/Home

即使完全从/Library/Java/JavaVirtualMachines/ 中删除jdk-15.0.1.jdk 似乎也没有任何改变。所以,这个 JDK 必须在其他地方定义和使用,它的存在覆盖了我放在我的 .bash_profile 文件中的任何内容。以前有没有其他人经历过这种情况?这种改变可能吗?

【问题讨论】:

  • 另外,如果该链接问题中的第一个答案对您没有帮助,那么第二个答案可能会。
  • 对不起。这又是那个参考...stackoverflow.com/questions/21964709/…
  • 不是官方回答,但SDKMAN是你的朋友。

标签: java macos java-11 macos-catalina


【解决方案1】:

原来问题出在我的.bash_profile 中。虽然我不确定每个人是否都是这种情况,但我的PATH 环境变量设置取代了我的JAVA_HOME 环境变量,我的PATH 变量在其中引用了我的JAVA_HOME 变量。这已通过更改我的 .bash_profile 文件中的以下内容得到解决。

如果 JAVA_HOME 是唯一添加的变量,那么以下应该可以工作。

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-11.0.9.jdk/Contents/Home

export PATH=$JAVA_HOME/bin

如果还有其他人,那么这应该可以工作。

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-11.0.9.jdk/Contents/Home

export SOME_OTHER_PATH=/somepath

export PATH=$SOME_OTHER_PATH:$JAVA_HOME/bin

感谢大家的帮助!

【讨论】:

    【解决方案2】:

    确保.bash_profile 文件中关于JAVA_HOME第一 行是这样的:

    export JAVA_HOME=$(/usr/libexec/java_home -v 11.0.9)
    

    您可以运行/usr/libexec/java_home -V 来查看所有已安装Java 虚拟机的列表。在我的机器上,我有以下内容(我的看起来会略有不同,因为此输出来自 Big Sur):

    Matching Java Virtual Machines (6):
        15.0.1 (x86_64) "UNDEFINED" - "OpenJDK 15.0.1" /usr/local/Cellar/openjdk/15.0.1/libexec/openjdk.jdk/Contents/Home
        11.0.9 (x86_64) "UNDEFINED" - "OpenJDK 11.0.9" /usr/local/Cellar/openjdk@11/11.0.9/libexec/openjdk.jdk/Contents/Home
        11.0.6 (x86_64) "Oracle Corporation" - "Java SE 11.0.6" /Library/Java/JavaVirtualMachines/jdk-11.0.6.jdk/Contents/Home
        11.0.1 (x86_64) "Oracle Corporation" - "Java SE 11.0.1" /Library/Java/JavaVirtualMachines/jdk-11.0.1.jdk/Contents/Home
        1.8.0_275 (x86_64) "UNDEFINED" - "OpenJDK 8" /usr/local/Cellar/openjdk@8/1.8.0+275/libexec/openjdk.jdk/Contents/Home
        1.8.0_131 (x86_64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home
    /usr/local/Cellar/openjdk@8/1.8.0+275/libexec/openjdk.jdk/Contents/Home
    

    最底部的那行(在 Catalina 中可能不存在,但您可以通过运行 /usr/libexec/java_home 得到它是您当前选择的 JVM。

    【讨论】:

    • 但这只是设置 JAVA_HOME,对吧? OP 说他们试过了,但没有任何改变……如果我没看错的话。
    • @Steve 是的,确实如此。我怀疑问题仍然存在于$JAVA_HOME(我自己已经处理了很多问题),除非我误解了这个问题,在这种情况下,你链接的问题似乎是最好的选择。
    • 嗨@Sam,这已经是我.bash_profile 的第一行了。我已经快速尝试了一些解决方案,但我不确定发生了什么。它几乎似乎完全忽略了该文件。
    • @ChloeBennett 好的,只是为了确保文件正常工作,将行 echo "Profile Test" 添加到您的 .bash_profile 中,然后打开一个新的外壳/源您的配置文件。 “Profile Test”应该打印在您的提示上方。这行得通吗?
    • 也就是说,我发现了问题,如果没有这个帖子,我想我不会注意到它。事实证明,我的总体 PATH 变量(最初使用我的 JAVA_HOME 变量,已被我的 android 设置覆盖)。所以,我的系统正在读取 PATH,但不是 JAVA_HOME。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-23
    • 2020-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-11
    • 2020-12-31
    相关资源
    最近更新 更多