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


559

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

但是,一旦安装,它看起来就像JAVA_HOME环境变量未正确设置



在Mac Sierra上,我有/ library / Java / JavaVirtualMachines,它具有jdk和“系统偏好设置”>“ Java”,这两个有什么区别?
vikramvi

不同的问题,谢谢
Olivier Refalo

不要低估Java安装可能未正确完成的机会。如果以下所有出色建议都无效,请尝试[重新]安装!
MarkHu

Answers:


1058

随着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)"

更新:基于Jilles van Gurp response添加了-v标志。


1
很高兴知道。我不得不说,我对Lion的功能列表不太满意。增强我的使用率的方式似乎不多...
prodigitalson 2011年

1
@Oliver:ewww :-)那可能是最没有用的东西了……我总是在屏幕上打开并排列多个窗口,这样我就可以一次看到多个东西……通常在每个空间上都有不同的布局。
prodigitalson 2011年

11
这对我不起作用。/System/Library/Frameworks/JavaVM.framework/家庭办公。
chaostheory

7
也可以在Maverick上使用!
cbare

3
对于Java 11和High Sierra,请导出JAVA_HOME =“ $(// usr / libexec / java_home -v 11)”
Willie Z

112

/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可以正常工作。


blog.hgomez.net/2012/07已损坏 ,但它是固定在现在链接到答案web.archive.org/web/20140813164713/http://blog.hgomez.net/blog/...
马特ç

export JAVA_HOME =“ / usr / libexec / java_home -v 1.8”
Leo Nguyen

83

对我来说,Mountain Lion 10.8.2,投票最多的解决方案不起作用。我通过Oracle和Maven从Homebrew安装了jdk 1.7。

我的解决方案也来自我从自制软件安装的hadoop的hadoop-env.sh文件。我在〜/ .bash_profile中添加以下句子,它可以正常工作。

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

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


1
如果您已经从Apple安装了Java 6,它将可以正常工作。这里的关键是,你使用的是Oracle的Java 7
奥利维尔Refalo

2
这对我在Mavricks上非常有效,但是java_home脚本的位置不同。 export JAVA_HOME="$(/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java_home)"
Christopher Frost

1
我试图在Mac Yosemite上设置Maven,这种设置JAVA_HOME的方法对我有效。
Alocus

适用于Sierra 10.12和Java 8
Kanak Sony,2008年

41

上述答案都没有帮助我。我想所有答案都是针对老年人的OS X

对于OS X Yosemite 10.10,请按照下列步骤

使用您喜欢的文本编辑器打开: ~/.bash_profile

//This command will open the file using vim
$ vim ~/.bash_profile

在文件中添加以下行并保存(vim::后跟“ x”):

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

然后在终端中键入以下两个命令以查看输出:

$ source ~/.bash_profile

$ echo $JAVA_HOME

在第二行中,您正在更新.bash_profile文件的内容。


我想我得到了你的PB -您使用引号来代替反引号'VS'
奥利维尔Refalo

不,我使用的是正确的引号,相反,我尝试复制粘贴,但是没有用。我更新了答案,因为它对我有用。
吉里(Giri)2015年

。@OlivierRefalo我可以看到你已经更新了用双引号(“)你的答案但即使没有引号,它的工作原理。
吉里

非常感谢 。它适用于我在优胜美地10.10
维杰2015年

2
这是唯一可行的解​​决方案。通过任何其他解决方案添加路径将临时添加,直到终止终端,然后该路径消失。要永久添加,路径必须保存在.bash_profile文件中。同时,为了简单起见,我使用nano而不是vim。
Nadeem Jamali'3

31

针对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'

29

上面的内容对我的Amazon EC2工具不起作用,因为它期望bin/java下面的内容JAVA_HOME/System/Library/Frameworks/JavaVM.framework/Home做过。


是狮子吗?您从Apple获得了官方Java软件包,还是从Oracle获得了Java6 / 7?
Olivier Refalo 2012年

我相信这是苹果公司的Java软件包。
Cawflands

1
@AndrewH是的,我发现同样如此。安装了Apple的Java软件包并发现了实际的库路径(例如,在eclipse.ini中设置-vm):/System
Library

谢谢(你的)信息。也许我太简单了,但是为什么OS X会使如此简单的事情变得一团糟?
Kuberchaun 2015年

18

对于OS X,您可以执行以下操作:

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

值得注意的是,HFS +不区分大小写。
sufinawaz 2014年

14

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

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

1
我没有收到您的建议:与export JAVA_HOME =有/usr/libexec/java_home 什么不同?命令/ usr / libexec / java_home返回/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
Olivier

对于visualgc / usr / libexec / java_home产生:在/ usr / libexec / java_home中找到的java.exe不在JDK目录中。请设置并导出JVMSTAT_JAVA_HOME环境变量,以引用包含Sun J2SE 1.5.0 JDK(不是JRE)的目录,然后重试。
EGHM '02

13

以下对我有用。我在装有Java 8的OSX Yosemite上使用ZSH。

以下命令/usr/libexec/java_home发出到JDK主页的路径:

/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home

在你的~/.zshrc

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

与建议的解决方案有何不同?
Olivier Refalo,2014年

它与建议的解决方案没有什么不同。该解决方案特定于使用ZSH,Java 8和OSX Yosemite的人员。
Hemanta 2014年

确认与OSX Yosemite上安装的Java 1.8一样工作时很有趣,很高兴。
Ashoor

通用解决方案适用于Java 8,zsh和优胜美地。
yaauie

10

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

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

这也应该与AWS一起使用,因为它bin位于Home下方


1
有点不同意该语句“更可升级” / usr / libexec / java_home是一个返回路径而不是固定路径的exe。除了取决于您使用的jvm版本外,上面的路径也不匹配
Olivier Refalo 2012年

10

较新的Oracle JVM(例如1.7.0_21-b12)似乎安装在这里:

/Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home


1
确实-该/usr/libexec/java_home工具针对这些Java版本返回错误。
Joe Dyndale

1
这是下载
v1.7

2
这是安装JRE的路径。大部分的答案和评论都与JDK有关。不一样的东西。
8None1 2014年

9

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

1
在Catalina上运作。Ty
TuGordoBello

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


@AdonisSMU您找到解决方案了吗?
卢卡斯

3

我不得不将其明确设置为Macbook air上的确切路径。

遵循的步骤:

  1. 尝试echo $JAVA_HOME(如果设置,它将显示路径),如果没有,请尝试使用进行搜索sudo find /usr/ -name *jdk
  2. 使用-编辑Bash p sudo nano ~/.bash_profile
  3. 将确切路径添加到JAVA Home(具有上面步骤2中的路径) export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home
  4. 保存并退出
  5. 使用-检查JAVA_Home- echo $JAVA_HOME

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


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


1
在全新安装的Mavericks上,这是唯一对我有用的解决方案。不得不将sqldeveloper指向此处的jdk主页(如该线程所建议,以使其正常工作。)
chris

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"


1

升级Mac OS并遇到以下问题后,出现了相同的问题:

  1. cmd> vi〜/ .bash_profile

  2. 添加/更新JAVA_HOME的行:export JAVA_HOME =“ / Library / Java / JavaVirtualMachines / jdk1.7.0_15.jdk / Contents / Home”

  3. cmd> source〜/ .bash_profile或打开一个新终端

我认为jdk版本可能会有所不同,因此只需使用/ Library / Java / JavaVirtualMachines /下的版本即可


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以获取有关如何选择版本的更多详细信息。

PS不要忘记 保存〜/ .bash_profile


1

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

/usr/libexec/java_home -v 11

0

此答案与山狮有关,与狮子无关。我需要针对AWS命令行工具执行此操作。根据AWS文档,运行which java将返回/usr/bin/java

因此,我将其设置JAVA_HOME=/usr.bashrc

显然,它/usr/bin/java是一个/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java使它全部起作用的符号链接。

更新资料

如以下注释中所述,JAVA_HOMEJAVA_HOME环境变量将由AWS Command Line Tools以外的其他设备使用时,此值不是理想的解决方案。但是,正如其文档中所给出的那样,它对于AWS Command Line Tools来说效果很好。


关键是,/ usr不是正确的JAVA_HOME目录。可以找到bin / java。但是有时,构建者(ant,make)使用JAVA_HOME引用lib / tools.jar中的javac编译器。对于这些问题,您的解决方案将失败
Olivier Refalo 2012年

啊,谢谢你的信息。你是对的。将更新答案。
2012年

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

您能否添加更多信息以使此答案有用。
米卡2015年

0

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

MAC用户也不再需要它。!


0

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

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

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

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


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

-1

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

参考:http : //qiita.com/seri_k/items/e978c1339ce51f13e297

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.