Can';t在macOS Catalina上动态设置JAVA_主页

Can';t在macOS Catalina上动态设置JAVA_主页,java,bash,macos,java-home,Java,Bash,Macos,Java Home,tl,dr,; 执行export JAVA_HOME=$(/usr/libexec/JAVA_HOME-v 14)一旦设置了JAVA_HOME,将不会更改活动的JAVA 台阶 首先设置JAVA_HOME(例如使用export JAVA_HOME=$(/usr/libexec/JAVA_HOME-v 11)): 尝试将其设置为不同的版本(例如export JAVA_HOME=$(/usr/libexec/JAVA_HOME-v14))-它仍然使用以前设置的JAVA(即使JAVA_HOME已更新)

tl,dr,; 执行
export JAVA_HOME=$(/usr/libexec/JAVA_HOME-v 14)
一旦设置了
JAVA_HOME
,将不会更改活动的JAVA


台阶

  • 首先设置
    JAVA_HOME
    (例如使用
    export JAVA_HOME=$(/usr/libexec/JAVA_HOME-v 11)
    ):
  • 尝试将其设置为不同的版本(例如
    export JAVA_HOME=$(/usr/libexec/JAVA_HOME-v14)
    )-它仍然使用以前设置的
    JAVA
    (即使
    JAVA_HOME
    已更新):
  • 我不知道为什么它现在不起作用了——前一阵子它还不错(我想是2-3个月前)

    有一个看似相似的主题()但归结为不同的shell。在我的例子中,我使用的是来自brew的相同shell-bash:

    $ bash -version
    GNU bash, version 5.0.18(1)-release (x86_64-apple-darwin19.5.0)
    Copyright (C) 2019 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
    
    This is free software; you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.
    
    $bash-版本
    GNU bash,版本5.0.18(1)-发布版(x86_64-apple-darwin19.5.0)
    版权所有(C)2019免费软件基金会。
    许可证GPLv3+:GNU GPL版本3或更高版本
    这是自由软件;您可以自由更改和重新分发它。
    在法律允许的范围内,不存在任何担保。
    
    似乎更新
    JAVA\u HOME
    没有反映在
    路径
    变量中


    因此,请同时更新PATH变量并保持更新后的
    JAVA_HOME
    ,因为导出
    PATH
    命令中的第一个元素似乎更新
    JAVA_HOME
    没有反映在
    PATH
    变量中


    因此,请同时更新PATH变量,并将更新后的
    JAVA_HOME
    作为导出
    PATH
    命令的第一个元素,好的,我终于解决了这个问题。正如其他人指出的,一切都与
    PATH
    变量有关。我确实有
    JAVA_HOME/bin
    在那里……这导致了问题。今天在更新过程中,我注意到有以下评论:

    keg_only "it shadows the macOS `java` wrapper"
    
    事情马上就“咔哒”一声发生了。在搜索了一点之后,我找到了确认问题的答案。通过在我的
    .profile
    文件的
    路径中包含
    JAVA\u HOME
    ,我破坏了它的
    JAVA
    包装器的本机macOS功能,该包装器基于当前设置的
    JAVA\u HOME
    选择活动的
    JAVA
    版本

    这是我的示例会话(从打开shell并在
    .profile
    文件中使用
    export JAVA_HOME=$(/usr/libexec/JAVA_HOME-v 11)
    )——我在概要文件中使用默认值,然后显式设置
    JAVA_HOME
    ,并动态切换
    JAVA
    版本:

    $java-version
    openjdk版本“11.0.8”2020-07-14
    OpenJDK运行时环境采用OpenJDK(构建11.0.8+10)
    OpenJDK 64位服务器VM采用OpenJDK(构建11.0.8+10,混合模式)
    $export JAVA_HOME=$(/usr/libexec/JAVA_HOME-v14)
    $java-版本
    openjdk版本“14.0.2”2020-07-14
    OpenJDK运行时环境采用OpenJDK(构建14.0.2+12)
    OpenJDK 64位服务器VM采用OpenJDK(构建14.0.2+12,混合模式,共享)
    
    好的,我终于解决了这个问题。正如其他人指出的,一切都与
    PATH
    变量有关。我确实有
    JAVA_HOME/bin
    在那里……这导致了问题。今天在更新过程中,我注意到有以下评论:

    keg_only "it shadows the macOS `java` wrapper"
    
    事情马上就“咔哒”一声发生了。在搜索了一点之后,我找到了确认问题的答案。通过在我的
    .profile
    文件的
    路径中包含
    JAVA\u HOME
    ,我破坏了它的
    JAVA
    包装器的本机macOS功能,该包装器基于当前设置的
    JAVA\u HOME
    选择活动的
    JAVA
    版本

    这是我的示例会话(从打开shell并在
    .profile
    文件中使用
    export JAVA_HOME=$(/usr/libexec/JAVA_HOME-v 11)
    )——我在概要文件中使用默认值,然后显式设置
    JAVA_HOME
    ,并动态切换
    JAVA
    版本:

    $java-version
    openjdk版本“11.0.8”2020-07-14
    OpenJDK运行时环境采用OpenJDK(构建11.0.8+10)
    OpenJDK 64位服务器VM采用OpenJDK(构建11.0.8+10,混合模式)
    $export JAVA_HOME=$(/usr/libexec/JAVA_HOME-v14)
    $java-版本
    openjdk版本“14.0.2”2020-07-14
    OpenJDK运行时环境采用OpenJDK(构建14.0.2+12)
    OpenJDK 64位服务器VM采用OpenJDK(构建14.0.2+12,混合模式,共享)
    
    我对macos了解不多,但是否有一个与窗口的
    路径
    env变量等价的变量来查找
    java
    命令?有,但以前它是自动更新的,以反映更新后的
    java\u HOME
    (如果您想在当前shell中快速切换活动
    java
    版本,这非常方便)我对macos了解不多,但是否有一个与窗口的
    PATH
    env变量等价的变量来查找
    java
    命令?有,但以前它是自动更新的,以反映更新后的
    java\u HOME
    (如果您想在当前shell中快速切换活动的
    java
    版本,这非常方便)我的
    profile
    文件中有
    export PATH=$java\u HOME/bin:$PATH
    。似乎当前为每个shell实例设置了路径。在它变得更“动态”之前仅更改
    JAVA\u HOME
    也反映在
    PATH
    中。因此,如果在shell中执行
    export PATH=$JAVA\u HOME/bin:$PATH
    ,然后尝试
    JAVA-version
    ,它是否能像预期的那样工作,但在这种情况下,我会在
    PATH
    中得到两个版本的路径,我认为如果在
    .profile
    file它应该可以工作
    export JAVA_HOME=$(/usr/libexec/JAVA_HOME-v14))
    export PATH=$JAVA_HOME/bin:$PATH
    我有它们!设置JAVA本身也很好。我试图实现的是能够在以后动态切换JAVA版本。也就是说,我打开新的shell,拥有java11(按照配置文件)但是我想切换到java14。以前,将JAVA_切换到主页就足够了
    keg_only "it shadows the macOS `java` wrapper"