为什么命令 /usr/libexec/java_home 不起作用?

14 浏览
0 Comments

为什么命令 /usr/libexec/java_home 不起作用?

操作系统:MacOS Big Sur 11.0.1\n我使用/usr/libexec/java_home命令来更改Java版本。\n有些程序需要特定的版本,所以我安装了多个Java版本。\n

 /usr/libexec/java_home -V            
匹配的Java虚拟机(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

\n我配置了.bash_profile:\n

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" # 将RVM加载到shell会话中 *作为函数*
source ~/.bashrc

\n至少在MacOS更新之前是有效的。\n但是现在:\n\"enter\n它总是使用jdk14。\n这对我来说是个问题。

0
0 Comments

问题出现的原因是更新了MacOS后,shell由bash更改为zsh。解决方法是验证shell是否为bash,并使用echo $ZSH_NAME命令来检查。如果结果为空,则表示正在运行zsh而不是bash。另外,可以尝试使用env JAVA_HOME=JAVA_13_HOME mvn ...命令来验证配置。

还有一位用户表示遇到了相同的问题,只有版本1.8被返回。但是,如果使用sudo命令运行该命令,则可以正常工作。

问题的解答可以在stackoverflow.com/questions/64917779/…找到。感谢提供解答的用户。在设置了JAVA_HOME变量之后,/usr/libexec/java_home -v {pattern}命令将变得无用。

0
0 Comments

/usr/libexec/java_home命令无法正常工作的原因是在设置JAVA_HOME之前,没有使用/usr/libexec/java_home -v {version}命令来获取所需的信息。解决方法是在shell初始化时,通过/usr/libexec/java_home -v {version}命令来获取所需的信息,然后再设置JAVA_HOME。如果需要确保绝对正确,可以在使用/usr/libexec/java_home -v {version}命令之前先使用unset JAVA_HOME命令将JAVA_HOME变量清空。例如,在使用类似direnv的工具时,.envrc文件的内容可以如下所示:

unset JAVA_HOME

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

PATH_add $JAVA_HOME/bin

通过这种方式,可以先清空JAVA_HOME变量,然后再使用/usr/libexec/java_home -v {version}命令来设置JAVA_HOME,并将JAVA_HOME/bin添加到PATH中。这样就可以确保JAVA_HOME变量被正确地设置为所需的版本。此外,还有用户提到他们有一些用于设置JAVA_HOME到不同版本的别名,而上述解决方法中提到了需要先将JAVA_HOME变量清空,这个解决方法对他们很有帮助。

0
0 Comments

/usr/libexec/java_home命令无法正常工作的原因是因为在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)
...

以上就是为什么/usr/libexec/java_home命令无法工作的原因以及解决方法。

0