【问题标题】:Why command /usr/libexec/java_home doesn't work?为什么命令 /usr/libexec/java_home 不起作用?
【发布时间】:2021-03-17 23:33:33
【问题描述】:

操作系统:MacOS Big Sur 11.0.1

我使用/usr/libexec/java_home命令更改java版本。

有些程序运行需要特殊版本。所以我安装了多个版本的java。

 /usr/libexec/java_home -V            
Matching Java Virtual Machines (7):
    14.0.1 (x86_64) "Oracle Corporation" - "Java SE 14.0.1" /Library/Java/JavaVirtualMachines/jdk-14.0.1.jdk/Contents/Home
    13 (x86_64) "Oracle Corporation" - "Java SE 13" /Library/Java/JavaVirtualMachines/jdk-13.jdk/Contents/Home
    10.0.2.0.13 (x86_64) "Oracle Corporation" - "Java" /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
    10.0.2 (x86_64) "Oracle Corporation" - "Java SE 10.0.2" /Library/Java/JavaVirtualMachines/jdk-10.0.2.jdk/Contents/Home
    1.8.0_192 (x86_64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_192.jdk/Contents/Home
    1.8.0_111 (x86_64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home
    1.7.0_80 (x86_64) "Oracle Corporation" - "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/jdk-14.0.1.jdk/Contents/Home

我配置了.bash_profile

export JAVA_HOME=$(/usr/libexec/java_home)
export JAVA_7_HOME=$(/usr/libexec/java_home -v1.7)
export JAVA_8_HOME=$(/usr/libexec/java_home -v1.8)
export JAVA_10_HOME=$(/usr/libexec/java_home -v10)
export JAVA_13_HOME=$(/usr/libexec/java_home -v13)

alias jdk7="export JAVA_HOME=$JAVA_7_HOME"
alias jdk8="export JAVA_HOME=$JAVA_8_HOME"
alias jdk10="export JAVA_HOME=$JAVA_10_HOME"
alias jdk13="export JAVA_HOME=$JAVA_13_HOME"

export MAVEN_HOME=/Users/peizangpin/Program/apache-maven-3.6.3
export PATH=$PATH:$MAVEN_HOME/bin

export GRADLE_HOME=/Users/peizangpin/Program/gradle-6.7
export PATH=$PATH:$GRADLE_HOME/bin
export GRADLE_USER_HOME=/Users/peizangpin/Documents/ResuorcesPackage/gradle

export PATH=/opt/local/bin:$PATH
export PATH=/opt/local/sbin:$PATH
export PATH=/usr/local/bin:$PATH
export PATH=/usr/local/mysql/bin:$PATH
export PATH=$PATH:/usr/local/opt/go/libexec/bin
export PATH=$PATH:/usr/local/go/bin
export PATH=$PATH:/usr/local/opt/rabbitmq/sbin
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function*

source ~/.bashrc

至少在 MacOS 更新之前它可以工作。

但是现在:

它总是使用jdk14。

这对我来说是个问题。

【问题讨论】:

    标签: java macos shell java-home


    【解决方案1】:

    感谢@MarioStefanutti 共享链接。 Wrong JAVA_HOME after upgrade to macOS Big Sur v11.0.1

    由于JAVA_HOME 变量已设置。 /usr/libexec/java_home -v {pattern} 将毫无用处。

    所以,解决方法是在设置JAVA_HOME之前执行/usr/libexec/java_home -v {pattern}

    export JAVA_7_HOME=$(/usr/libexec/java_home -v1.7)
    export JAVA_8_HOME=$(/usr/libexec/java_home -v1.8)
    export JAVA_10_HOME=$(/usr/libexec/java_home -v10)
    export JAVA_13_HOME=$(/usr/libexec/java_home -v13)
    
    # finally set JAVA_HOME
    export JAVA_HOME=$(/usr/libexec/java_home)
    ...
    

    【讨论】:

      【解决方案2】:

      由于您在更新 MacOS 之前说它可以工作,因此请验证您的 shell 是 bash(新的默认值是 zsh)。试试 echo $ZSH_NAME 之类的:如果它是空白的,那么你运行的是 zsh 而不是 bash。

      尝试使用env JAVA_HOME=JAVA_13_HOME mvn ... 之类的方法来验证您的配置。

      【讨论】:

      • 对我来说同样的行为。不知道什么时候开始的,但对我来说也是一样。 @FuneralObjects。就我而言,仅返回 1.8 版。如果我使用 sudo 运行命令,它可以正常工作
      • 我刚刚在这里找到了答案:stackoverflow.com/questions/64917779/…
      • @MarioStefanutti 谢谢。它帮助到我。设置JAVA_HOME 变量后,/usr/libexec/java_home -v {pattern} 将失效。
      【解决方案3】:

      在设置JAVA_HOME之前使用/usr/libexec/java_home -v {version},否则会一直返回JAVA_HOME中设置的那个

      在shell初始化中,命令你的语句在设置JAVA_HOME 之前通过/usr/libexec/java_home -v {version}捕获所有需要的信息

      在其他情况下,或者如果您想绝对确定,您可以先unset JAVA_HOME,然后再使用/usr/libexec/java_home -v {version}

      例如,当使用像 direvn 这样的东西时,.envrc 文件看起来像

      unset JAVA_HOME
      export JAVA_HOME=$(/usr/libexec/java_home -v 11)
      PATH_add $JAVA_HOME/bin
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-27
        • 1970-01-01
        • 1970-01-01
        • 2013-09-15
        相关资源
        最近更新 更多