关于java:macOS Mojave(10.14)到Lion(10.7)的JAVA_HOME在哪里?

Where is JAVA_HOME on macOS Mojave (10.14) to Lion (10.7)?

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

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


安装Java可选包或Oracle JDK后,
在?/ .bash_profile文件中添加以下行之一将相应地设置环境变量。

1
2
3
4
5
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)"

更新:添加-v标志基于Jilles van Gurp响应。


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

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

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

更新:在OSX上了解Java命令行可以更好地解释其工作原理。

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

是这样做的方式。注意,将此更新为1.8工作正常。


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

我的解决方案来自我自己安装的hadoop的hadoop-env.sh文件。
我在?/ .bash_profile中添加了以下句子,它有效。

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

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


上述答案都没有帮助我。我想所有答案都适用于较旧的OS X

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

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

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

在文件中添加以下行并保存(:对于vim,后跟"x"):

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

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

1
2
3
$ source ~/.bash_profile

$ echo $JAVA_HOME

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


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

.bash_profile中:

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

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

设置活动Java:

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

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

1
2
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'

终端测试:

1
2
3
4
5
6
7
8
9
10
% 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的更新

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

编辑:Java 11的更新

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


以上对于我使用亚马逊的EC2工具不起作用,因为它期望在JAVA_HOME下面bin/java等。 /System/Library/Frameworks/JavaVM.framework/Home确实有效。


对于OS X,您可以:

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


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

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


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

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

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

在你的~/.zshrc中,

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


较新的Oracle JVM(如1.7.0_21-b12)似乎安装在此处:

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


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

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

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


对于macOS Mojave 10.14.1和JAVA 11.0.1
我将个人资料设为

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

键入终端此确认:

1
2
3
4
5
$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)

我的方法是:

的.bashrc

1
2
3
4
5
6
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之间切换变得非常容易


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

遵循的步骤:

  • 尝试echo $JAVA_HOME(如果设置它将显示路径),如果没有,尝试使用sudo find /usr/ -name *jdk搜索它
  • 使用 - sudo nano ~/.bash_profile编辑Bash p
  • 添加到JAVA Home的确切路径(使用上面步骤2的路径)
    export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home
  • 保存并退出
  • 使用 - echo $JAVA_HOME检查JAVA_Home
  • 我在带有JAVA 8的Macbook Air上运行MACOS MOJAVE - 10.14.2(18C54)


    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"


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


    如果您需要在Mac OS X(Yosemite)下拥有多个版本的JDK,那么为它们之间的自动切换添加一些脚本可能会有所帮助。

    你要做的是编辑?/ .bash_profile并添加以下内容:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    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目录。最后我们可以简单地执行函数

    1
    setjdk 1.7

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

    1
    setjdk 1.7.0_51

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

    附:保存后不要忘记使用?/ .bash_profile。


    升级我的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 /下的版本


    只需在netbeans.conf文件中设置1.8 jdk版本的java_home:

    1
    /Applications/NetBeans/NetBeans 8.2.app/Contents/Resources/NetBeans/etc/netbeans.conf

    取消注释:

    1
    netbeans_jdkhome="path/to/jdk"

    并设置1.8 jdk的路径,在我的情况下:

    1
    netbeans_jdkhome="/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home"

    这种方法让你在mac os上有几个jdk版本


    对于Mac Yosemite,

    JDK 1.7.0_xx正在使用

    1
    2
    3
    4
    5
    6
    $ 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


    对于Mac上的Fish终端用户(我相信它也可以在Linux上使用),这应该可行:

    1
    2
    3
    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

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

    它不会自动设置,以便在我运行的系统上正确设置:

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

    这个答案与Mountain Lion有关,而与Lion无关。我需要为AWS Command Line Tools执行此操作。根据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 Command Line Tools以外的东西使用时,此JAVA_HOME值不是理想的解决方案。但是,它适用于AWS Command Line Tools,正如其文档中所述。


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

    MAC用户也不再需要它。呀!


    对于mac用户。
    java 8应该添加

    1
    2
    export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
    # JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home

    java 6:

    1
    2
    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