Java是最新版macOS上的可选包。
然而,一旦安装,似乎 JAVA_HOME 环境变量未正确设置。
答案 0 :(得分:1024)
安装了Java optional package或Oracle JDK后, 在〜/ .bash_profile 文件中添加以下行之一将相应地设置环境变量。
export JAVA_HOME="$(/usr/libexec/java_home -v 1.6)"
or
export JAVA_HOME="$(/usr/libexec/java_home -v 1.7)"
or
export JAVA_HOME="$(/usr/libexec/java_home -v 1.8)"
更新:根据 Jilles van Gurp response添加 -v 标记。
答案 1 :(得分:103)
/usr/libexec/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。
更新:Understanding Java From Command Line on OSX可以更好地解释其工作原理。
export JAVA_HOME=`/usr/libexec/java_home -v 1.7`
是这样做的方法。请注意,将此更新为1.8可以正常工作。
答案 2 :(得分:79)
对我来说,Mountain Lion 10.8.2,投票最多的解决方案不起作用。 我通过Oracle安装了jdk 1.7,并从homebrew安装了maven。
我的解决方案来自我自己安装的hadoop的hadoop-env.sh文件。 我在〜/ .bash_profile中添加了以下句子,它可以工作。
export JAVA_HOME="$(/usr/libexec/java_home)"
此解决方案也适用于从Oracle安装Java 1.8的OS X Yosemite。
答案 3 :(得分:39)
上述答案都没有帮助我。我想所有答案都适用于较早的OS X
对于OS X Yosemite 10.10,请按照以下步骤操作
使用您喜欢的文字编辑器打开:~/.bash_profile
//This command will open the file using vim
$ vim ~/.bash_profile
在文件中添加以下行并保存(:后跟" x"对于vim):
export JAVA_HOME=$(/usr/libexec/java_home)
然后在终端中键入以下两个命令以查看输出:
$ source ~/.bash_profile
$ echo $JAVA_HOME
在第二行,您正在更新.bash_profile
文件的内容。
答案 4 :(得分:28)
以上对于我使用亚马逊的EC2工具不起作用,因为它在bin/java
下面需要JAVA_HOME
等。 /System/Library/Frameworks/JavaVM.framework/Home
确实有效。
答案 5 :(得分:27)
更新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_HOME10=`/usr/libexec/java_home --version 11` alias j11='export JAVA_HOME=$JAVA_HOME11; export PATH=$JAVA_HOME/bin:$PATH'
答案 6 :(得分:18)
对于OS X,您可以这样做:
export JAVA_HOME=`/System/Library/Frameworks/JavaVM.framework/Versions/Current/commands/java_home`
答案 7 :(得分:14)
在Mac OS X Lion上,要将visualgc设置为运行,我使用了:
export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home
答案 8 :(得分:13)
以下对我有用。我在安装了Java 8的OSX Yosemite上使用ZSH。
以下命令/usr/libexec/java_home
将发出JDK home的路径:
/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home
在~/.zshrc
,
export JAVA_HOME = "/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home"
答案 9 :(得分:10)
更好(更可升级)的方法是使用以下方法:
/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home
这也适用于AWS,因为它在Home
下面有bin
答案 10 :(得分:10)
1.7.0_21-b12等较新的Oracle JVM似乎安装在此处:
/Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
答案 11 :(得分:7)
对于macOS Mojave 10.14.1和JAVA 11.0.1 我将个人资料设置为
export JAVA_HOME=$(/usr/libexec/java_home)
键入终端以确认:
$JAVA_HOME/bin/java -version
java version "11.0.1" 2018-10-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.1+13-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.1+13-LTS, mixed mode)
答案 12 :(得分:5)
我的方法是:
的.bashrc
export JAVA6_HOME=`/usr/libexec/java_home -v 1.6`
export JAVA7_HOME=`/usr/libexec/java_home -v 1.7`
export JAVA_HOME=$JAVA6_HOME
# -- optional
# export PATH=$JAVA_HOME/bin:$PATH
这使得在J6和J7之间切换非常容易
答案 13 :(得分:3)
我必须将其明确设置为Macbook air上的确切路径。
遵循的步骤:
echo $JAVA_HOME
(如果设置了该路径,则会显示路径),否则,请尝试使用sudo find /usr/ -name *jdk
sudo nano ~/.bash_profile
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home
echo $JAVA_HOME
我正在使用JAVA 8在Macbook Air上运行MACOS MOJAVE-10.14.2(18C54)
答案 14 :(得分:2)
对于Mac OS X 10.9,我从Oracle安装了最新版本的JRE,然后将JAVA_HOME重置为/Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home。
我确信有更好的方法,但让我起来跑步。
hughsmac:~hbrien $ echo $ JAVA_HOME /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home
答案 15 :(得分:2)
OSX Yosemite,ZSH和Java SE Runtime Environment 8,我不得不:
$ sudo ln -s /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands /System/Library/Frameworks/JavaVM.framework/Versions/Current/bin
并在〜/ .zshrc中将JAVA_HOME更改为
export JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Versions/Current"
答案 16 :(得分:1)
对于Java 11(JDK 11),可以使用以下命令进行定位:
/usr/libexec/java_home -v 11
答案 17 :(得分:1)
如果您需要在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 以获取有关如何选择版本的更多详细信息。
P.S。保存后不要忘记 source~ / .bash_profile 。
答案 18 :(得分:1)
升级我的Mac OS后,我遇到了同样的问题,后来为我工作了:
cmd> vi~ / .bash_profile
添加/更新JAVA_HOME的行: export JAVA_HOME =“/ Library / Java / JavaVirtualMachines / jdk1.7.0_15.jdk / Contents / Home”
cmd> source~ / .bash_profile或打开新终端
我认为jdk版本可能不同,所以只需使用/ Library / Java / JavaVirtualMachines /
下的版本答案 19 :(得分:0)
对于Mac Yosemite,
JDK 1.7.0_xx正在使用
$ ls -ltar /usr/bin/java
/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java
JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk1.7.0_xx.jdk/Contents/Home
答案 20 :(得分:0)
我在High Sierra 10.13.4上使用Fish shell并通过Brew安装了Java。
它没有自动设置,所以要在我运行的系统上设置correctly:
set -U JAVA_HOME (/usr/libexec/java_home)
答案 21 :(得分:0)
只需在netbeans.conf
文件中设置1.8 jdk版本的java_home:
/Applications/NetBeans/NetBeans 8.2.app/Contents/Resources/NetBeans/etc/netbeans.conf
取消注释行:
netbeans_jdkhome="path/to/jdk"
在我的情况下,将路径设置为1.8 jdk:
netbeans_jdkhome="/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home"
这种方法使您在Mac OS上拥有多个jdk版本
答案 22 :(得分:0)
对于Mac上的Fish终端用户(我相信它也可以在Linux上使用),这应该可以:
set -Ux JAVA_8 (/usr/libexec/java_home --version 1.8)
set -Ux JAVA_12 (/usr/libexec/java_home --version 12)
set -Ux JAVA_HOME $JAVA_8 //or whichever version you want as default
答案 23 :(得分:-1)
任何使用澳大利亚税务局(ATO)的AUSKEY的人都应该卸载AUSKEY。 这解决了我的JAVA_HOME问题。
MAC用户也不再需要它。耶!
答案 24 :(得分:-1)
此答案与 Mountain Lion 有关,而非Lion。我需要为AWS Command Line Tools执行此操作。根据{{3}},运行which java
会返回/usr/bin/java
。
所以,我在JAVA_HOME=/usr
中设置了.bashrc
。
显然,/usr/bin/java
是指向/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java
的符号链接,这使得一切正常。
<强>更新强>
如下面的评论中所述,当JAVA_HOME
环境变量要由AWS Command Line Tools以外的其他内容使用时,此JAVA_HOME
值不是理想的解决方案。但是,它适用于AWS Command Line Tools,正如其文档中所述。
答案 25 :(得分:-2)
对于mac用户。 java 8应该添加
export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
# JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home
java 6:
export JAVA_HOME=`/usr/libexec/java_home -v 1.6`
# JAVA_HOME=/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home