macOS Mojave(10.14)到Lion(10.7)上的JAVA_HOME在哪里?

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

然而,一旦安装,它看起来像JAVA_HOME环境变量是设置不正确

535068 次浏览
如果安装了Java可选包甲骨文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)"
or simply
export JAVA_HOME="$(/usr/libexec/java_home)"

注意:如果你在mac上使用酿造安装openjdk,请运行 sudo ln -sfn /usr/local/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk以使上述工作正常

更新:在Jilles van Gurp 响应的基础上增加- v标志。

上面的内容在亚马逊的EC2工具中并不适用,因为它期望bin/java等在JAVA_HOME下面。/System/Library/Frameworks/JavaVM.framework/Home确实有效。

在Mac OS X Lion上,设置visualgc运行,我使用:

export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home

/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。

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

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

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

一个更好的(更可升级的)方法是使用以下方法:

/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home

这应该也适用于AWS,因为它在Home下面有bin

这个答案与美洲狮有关,与狮子无关。我需要为AWS命令行工具这样做。根据AWS文档,运行which 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和maven从homebrew安装了jdk 1.7

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

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

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

在我升级我的Mac OS后,我也遇到了同样的问题,以下是我的工作:

  1. cmd > vi ~ / . bash_profile

  2. 为JAVA_HOME添加/更新行: 出口JAVA_HOME = " /图书馆/ Java / JavaVirtualMachines / jdk1.7.0_15.jdk /内容/家”< / p > < /李>

  3. ~ / cmd >来源。Bash_profile或打开一个新终端

我认为jdk版本可能不同,所以只使用你在/Library/Java/JavaVirtualMachines/下的版本

更新的Oracle jvm(如1.7.0_21-b12)似乎安装在这里:

# EYZ0

我的方法是:

. 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之间切换非常容易

对于Mac OS X 10.9,我从Oracle安装了最新版本的JRE,然后将JAVA_HOME重置为/Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home。

我相信有更好的方法,但这让我开始运行。

hughsmac:~ hbrien$ echo $JAVA_HOME /图书馆/ Java / JavaVirtualMachines / jdk1.7.0_45.jdk /内容/ Home < / p >

对于OS X你可以这样做:

export JAVA_HOME=`/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java_home`

下面的方法对我很有效。我在OSX Yosemite上使用ZSH安装了Java 8。

下面的命令/usr/libexec/java_home发出JDK home的路径:

# EYZ0

在你的~/.zshrc中,

export JAVA_HOME = "/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home"

如果你需要在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

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

setjdk 1.7

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

setjdk 1.7.0_51

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

附注:保存后不要忘记源~ / . bash_profile

OSX Yosemite, ZSH和Java SE运行时环境8,我不得不:

# EYZ0

and in ~/。将JAVA_HOME更改为 # EYZ0 < / p >

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

裁判:# EYZ0

麦克·约塞米蒂,

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

上面的答案对我没有帮助。我想所有的答案都适用于更老的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文件的内容。

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

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

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

在# EYZ0:

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'

我在High Sierra 10.13.4上使用 shell,并通过Brew安装Java。

它不是自动设置的,所以要在我的系统上设置它正确,我运行:

set -U JAVA_HOME (/usr/libexec/java_home)

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版本

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)

我必须在我的Macbook air上明确地将它设置为准确的路径。

步骤是:

  1. 尝试echo $JAVA_HOME(如果它设置了,它会显示路径),如果没有,尝试使用sudo find /usr/ -name *jdk搜索它
  2. 用- sudo nano ~/.bash_profile编辑Bash p
  3. 添加JAVA Home的确切路径(使用上面步骤2中的路径) 李# EYZ0 < / >
  4. 保存并退出
  5. 使用- echo $JAVA_HOME检查JAVA_Home

我在Macbook Air上使用JAVA 8运行MACOS MOJAVE - 10.14.2 (18C54)

对于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

对于Java 11 (JDK 11),可以使用以下命令找到它:

/usr/libexec/java_home -v 11

方便的命令,知道java的家和其他细节。

java -XshowSettings:properties -version

为了了解mac上的所有Java home:

/usr/libexec/java_home -V