Java是macOS最新版本的可选包。

然而,一旦安装,JAVA_HOME环境变量似乎没有正确设置。


当前回答

这个答案与山狮有关,与狮子无关。我需要为AWS命令行工具这样做。根据AWS文档,运行哪个java会返回/usr/bin/java.

因此,我在。bashrc中设置了JAVA_HOME=/usr。

显然,/usr/bin/java是一个指向/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java的符号链接。

更新

正如下面的评论中提到的,当JAVA_HOME环境变量被AWS命令行工具以外的东西使用时,这个JAVA_HOME值并不是理想的解决方案。不过,它在AWS命令行工具中工作得很好,正如它们的文档中给出的那样。

其他回答

对我来说,Mountain Lion 10.8.2,大多数人投票的解决方案不起作用。 我通过Oracle安装了jdk 1.7,从homebrew安装了maven。

我的解决方案来自hadoop的hadoop-env.sh文件,我也从homebrew安装。 我在~/中加入了下面的句子。Bash_profile,它可以工作。

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

此解决方案也适用于从Oracle安装Java 1.8的OS X Yosemite。

针对Java 9的更新和一些简洁的别名。

. bash_profile:

export JAVA_HOME8=`/usr/libexec/java_home --version 1.8`
export JAVA_HOME9=`/usr/libexec/java_home --version 9`

注意,对于最新版本,它是9而不是1.9。

设置活动Java:

export JAVA_HOME=$JAVA_HOME8
export PATH=$JAVA_HOME/bin:$PATH

一些用于在不同版本之间切换的额外别名:

alias j8='export JAVA_HOME=$JAVA_HOME8; export PATH=$JAVA_HOME/bin:$PATH'
alias j9='export JAVA_HOME=$JAVA_HOME9; export PATH=$JAVA_HOME/bin:$PATH'

终端测试:

% j8
% java -version
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
% j9
% java -version
java version "9"
Java(TM) SE Runtime Environment (build 9+181)
Java HotSpot(TM) 64-Bit Server VM (build 9+181, mixed mode)

编辑:针对Java 10的更新

export JAVA_HOME10=`/usr/libexec/java_home --version 10`
alias j10='export JAVA_HOME=$JAVA_HOME10; export PATH=$JAVA_HOME/bin:$PATH'

编辑:针对Java 11的更新

export JAVA_HOME11=`/usr/libexec/java_home --version 11`
alias j11='export JAVA_HOME=$JAVA_HOME11; export PATH=$JAVA_HOME/bin:$PATH'

/usr/ libeexec /java_home不是一个目录,而是一个可执行文件。它输出当前配置的JAVA_HOME,并且不实际更改它。这就是Java Preferences应用程序的作用,在我的例子中,它似乎坏了,实际上没有正确地更改JVM。它确实列出了1.7 JVM,但我可以切换/取消切换和拖放我想要的一切,而不实际改变/usr/libexec/java_home的输出。

即使在Lion上从Oracle安装了1.7.0 u6并在首选项中将其设置为默认值后,它仍然返回apple 1.6 java home。唯一对我有效的修复是手动设置JAVA_HOME:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_06.jdk/Contents/Home/

至少这样,当从命令行运行时,它将使用1.7。/usr/libexec/java_home仍然坚持1.6。

更新:在OSX上从命令行理解Java有更好的解释如何工作。

export JAVA_HOME=`/usr/libexec/java_home -v 1.7` 

就是这样做的。注意,将其更新到1.8就可以了。

如果你需要在Mac OS X (Yosemite)下使用多个版本的JDK,添加一些脚本以便在它们之间自动切换可能会很有帮助。

您要做的就是编辑~/。Bash_profile,并添加如下内容:

function setjdk() {
  if [ $# -ne 0 ]; then
   removeFromPath '/System/Library/Frameworks/JavaVM.framework/Home/bin'
   if [ -n "${JAVA_HOME+x}" ]; then
    removeFromPath $JAVA_HOME
   fi
   export JAVA_HOME=`/usr/libexec/java_home -v $@`
   export PATH=$JAVA_HOME/bin:$PATH
  fi
 }
 function removeFromPath() {
  export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;")
 }
setjdk 1.7

该脚本所做的是首先删除PATH中的其他JDK版本,这样它们就不会干扰我们的新JDK版本。然后,它巧妙地使用了/usr/libexec/java_home命令,该命令列出了已安装的JDK版本。-v参数告诉java_home返回JDK提供版本的路径,例如1.7。我们还将PATH更新为指向新找到的JAVA_HOME目录的bin目录。最后,我们可以简单地使用

setjdk 1.7

它会选择最新安装的1.7分支JDK版本。要选择一个特定的版本,只需执行即可

setjdk 1.7.0_51

代替。运行/usr/libexec/java_home -V以获得关于如何选择版本的更多详细信息。

附注:不要忘记来源~/。保存后的Bash_profile。

任何从澳大利亚税务局(ATO)使用AUSKEY的人都应该卸载AUSKEY。 这解决了我的JAVA_HOME问题。

MAC用户也不再需要它。是的!