Java 马科斯莫哈韦(10.14)到狮子(10.7)的爪哇之家在哪里?

Java 马科斯莫哈韦(10.14)到狮子(10.7)的爪哇之家在哪里?,java,macos,Java,Macos,Java是macOS最新版本上的可选软件包 然而,一旦安装,就好像JAVA_HOME环境变量没有正确设置,安装了or, 将以下行之一添加到~/.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="

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

然而,一旦安装,就好像JAVA_HOME环境变量没有正确设置,安装了or, 将以下行之一添加到~/.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)"
注意:如果使用brew在mac上安装openjdk,请运行
sudo ln-sfn/usr/local/opt/openjdk/libexec/openjdk.jdk/Library/Java/JavaVirtualMachines/openjdk.jdk
,以使上述功能正常工作


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

以上内容对于我使用Amazon的EC2工具不起作用,因为它期望
bin/java
等位于
java\u 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_输出到主页,实际上不会更改它。这就是Java Preferences应用程序的用途,在我的例子中,它似乎已经坏了,实际上并没有正确地更改JVM。它确实列出了1.7JVM,但我可以切换/取消切换&拖放我想要的所有内容,而不需要实际更改
/usr/libexec/java_home
的输出

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

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_06.jdk/Contents/Home/
至少这样,当从命令行运行时,它将使用1.7
/usr/libexec/java_home
仍然坚持1.6

更新:对其工作原理有更好的解释

export JAVA_HOME=`/usr/libexec/java_home -v 1.7` 
就是这样做的。注意,将其更新为1.8很好。

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

/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home
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

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

这个答案与山狮有关,而不是狮子。我需要为AWS命令行工具执行此操作。根据,运行
哪个java
返回
/usr/bin/java

因此,我在我的
.bashrc
中设置了
JAVA\u HOME=/usr

显然,
/usr/bin/java
是指向
/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java
的一个符号链接,这使得所有这些都能正常工作

更新


如下面的评论所述,当AWS命令行工具以外的其他工具使用
JAVA\u HOME
环境变量时,此
JAVA\u HOME
值不是理想的解决方案。不过,对于AWS命令行工具来说,它工作得很好,正如它们的文档中所给出的。

对于我,Mountain Lion 10.8.2,大多数人投票的解决方案不起作用。 我通过Oracle和maven从自制软件中安装了JDK1.7

我的解决方案来自hadoop的hadoop-env.sh文件,我也是从自制软件安装的。 我在~/.bash_配置文件中添加了下面的句子,效果很好

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

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

在升级Mac OS后,我也遇到了同样的问题,以下几点对我有效:

  • cmd>vi~/.bash_配置文件

  • 添加/更新JAVA_HOME的行: export JAVA_HOME=“/Library/JAVA/JavaVirtualMachines/jdk1.7.0_15.jdk/Contents/HOME”

  • cmd>source~/.bash_配置文件或打开新终端


  • 我认为jdk版本可能有所不同,因此只需使用您在/Library/Java/JavaVirtualMachines/

    下的版本即可。较新的Oracle JVM(如1.7.0_21-b12)似乎安装在这里:

    /Library/Internet\plugins/JavaAppletPlugin.plugin/Contents/Home
    我的方法是:

    巴什尔先生

    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
    

    这使得在Mac OS X 10.9的J6和J7之间切换非常容易。我从Oracle安装了最新版本的JRE,然后将JAVA_HOME重置为/Library/JAVA/JavaVirtualMachine/jdk1.7.0_45.jdk/Contents/HOME

    我相信有更好的方法,但它让我振作起来

    hughsmac:~hbrien$echo$javau HOME /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home

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

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

    以下几点对我有用。我在OSX Yosemite上使用ZSH,安装了Java8

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

    /Library/Java/JavaVirtualMachines/jdk1.8.0\u 05.jdk/Contents/Home

    在您的
    ~/.zshrc

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

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

    您要做的是编辑您的~/.bash\u配置文件,并添加以下内容:

    /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home
    
    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
    
    选择最新安装的JDK版本的1.7分支。要选择特定的版本,只需执行

    setjdk 1.7.0_51
    
    相反。运行/usr/libexec/java_home-V获取有关如何选择版本的更多详细信息


    另外,保存后不要忘记source~/.bash_profile

    OSX Yosemite、ZSH和Java SE运行时环境8,我必须:

    $sudo ln-s/System/Library/Framework
    
    $ 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
    
    //This command will open the file using vim
    $ vim ~/.bash_profile
    
    export JAVA_HOME=$(/usr/libexec/java_home)
    
    $ source ~/.bash_profile
    
    $ echo $JAVA_HOME
    
    set -U JAVA_HOME (/usr/libexec/java_home)
    
    /Applications/NetBeans/NetBeans 8.2.app/Contents/Resources/NetBeans/etc/netbeans.conf
    
    netbeans_jdkhome="path/to/jdk"
    
    netbeans_jdkhome="/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home"
    
    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)
    
    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
    
    /usr/libexec/java_home -v 11