为什么command/usr/libexec/java\u home不能工作?

7d7tgy0s  于 2021-07-03  发布在  Java
关注(0)|答案(3)|浏览(358)

操作系统: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。
这对我来说是个问题。

u3r8eeie

u3r8eeie1#

既然您在更新macos之前就说过它可以工作,那么请验证shell是bash(新的默认值是zsh)。试试这样的 echo $ZSH_NAME :如果为空,则运行的是zsh而不是bash。
试试这样的 env JAVA_HOME=JAVA_13_HOME mvn ... 验证您的配置。

nxowjjhe

nxowjjhe2#

使用 /usr/libexec/java_home -v {version} 设置前 JAVA_HOME ,否则它将始终返回 JAVA_HOME 在shell初始化中,命令语句通过 /usr/libexec/java_home -v {version} 设置前 JAVA_HOME 在其他情况下,或者如果你想绝对肯定,你可以先 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
b4qexyjb

b4qexyjb3#

感谢@mariostefanutti分享链接。升级到macos big sur v11.0.1后出现错误的java\u主页
JAVA_HOME 变量已设置。这个 /usr/libexec/java_home -v {pattern} 那就没用了。
所以,解决办法是执行 /usr/libexec/java_home -v {pattern} 设置前 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)

# finally set JAVA_HOME

export JAVA_HOME=$(/usr/libexec/java_home)
...

相关问题