Mac OS X和多个Java版本

Mac OS X和多个Java版本,java,macos,multiple-versions,homebrew-cask,jenv,Java,Macos,Multiple Versions,Homebrew Cask,Jenv,如何在MacOS上安装额外的java?我安装了jdk8,效果很好。但是现在我需要一个jdk7安装用于开发目的。当试图通过DMG文件安装旧版本时,我得到一个警告,即已经安装了较新版本的java,安装程序将退出 /usr/libexec/java_home -verbose Matching Java Virtual Machines (1): 1.8.0_20, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0

如何在MacOS上安装额外的java?我安装了jdk8,效果很好。但是现在我需要一个jdk7安装用于开发目的。当试图通过DMG文件安装旧版本时,我得到一个警告,即已经安装了较新版本的java,安装程序将退出

/usr/libexec/java_home -verbose
Matching Java Virtual Machines (1):
    1.8.0_20, x86_64:   "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk/Contents/Home

   /Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk/Contents/Home
除此之外,如何安装jdk7

谢谢

Dakky

卸载jdk8,安装jdk7,然后重新安装jdk8

我在它们之间切换的方法(在.profile中):

然后,您只需在终端中键入
java7
java8
,即可切换版本


(编辑:更新以添加Dylans对Java 9的改进)

在Mac上管理多个Java版本最干净的方法是使用

自制
中,使用:

  • 自制桶
    安装java版本
  • jenv
    管理已安装的java版本

如图所示,以下是要遵循的步骤

  • 安装自制软件
  • 安装自制jenv
  • 安装自制桶
  • 使用cask安装特定的java版本(请参阅下面的“自制cask版本”一段)
  • 为jenv添加此版本以管理它
  • 检查jenv是否正确管理了该版本
  • 对所需的每个java版本重复步骤4到6

  • 自制木桶版本 使用以下方法将抽头添加到自制中:

    brew tap homebrew/cask-versions
    
    然后,您可以查看所有可用的版本:

    brew search java
    
    然后,您可以安装您喜欢的版本:

    brew cask install java7
    brew cask install java6
    
    并像往常一样将其添加到jenv的管理中

    jenv add <javaVersionPathHere>
    
    jenv添加
    
    我认为这是最干净、最简单的方法


    另一个需要注意的重要事项,如中所述:

    对于不同类型的JDK或安装,您将有不同的 路径

    您可以使用
    /usr/libexec/java_home-V
    检查安装版本的路径,请参阅

    在Mac OS X Mavericks上,我发现如下:

    1) 内置JRE默认值:
    /Library/Internet\
    插件/JavaAppletPlugin.plugin/Contents/Home

    2) 从Apple下载的jdk:
    /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/

    3) 从Oracle下载的jdk:
    /Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home


    资源
    • “brew水龙头”说明
    • 对“brew版本”进行了解释和说明
    • 与“brew版本”类似的“cask版本”,请参见和

    我正在使用Mac OS X 10.9.5。当我需要一个版本来运行应用程序A,而使用另一个版本来运行应用程序B时,我就是这样在我的机器上管理多个JDK/JRE的

    在获得一些联机帮助后,我创建了以下脚本

    #!bin/sh
    function setjdk() {
      if [ $# -ne 0 ]; then
       removeFromPath '/Library/Java/JavaVirtualMachines/'
       if [ -n "${JAVA_HOME+x}" ]; then
        removeFromPath $JAVA_HOME
       fi
       export JAVA_HOME=/Library/Java/JavaVirtualMachines/$1/Contents/Home
       export PATH=$JAVA_HOME/bin:$PATH
      fi
     }
     function removeFromPath() {
      export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;")
     }
    #setjdk jdk1.8.0_60.jdk
    setjdk jdk1.7.0_15.jdk
    
    我将上面的脚本放在.profile文件中。只需打开终端,键入vi.profile,用上面的代码片段附加脚本并保存。一旦您键入
    source.profile
    ,这将运行您的配置文件脚本,而无需重新启动终端。现在键入
    java-version
    ,它将显示1.7作为您的当前版本。如果打算将其更改为1.8,然后注释行
    setjdk jdk1.7.0_15.jdk
    并取消注释行
    setjdk jdk1.8.0_60.jdk
    。保存脚本并使用source命令再次运行。当我必须编译两个需要不同java版本的不同Maven项目时,我使用此机制来管理多个版本的jdk/JRE

    在这上面找到的 让我们从安装jEnv开始

  • 在终端上运行这个

    brew install https://raw.github.com/gcuisinier/jenv/homebrew/jenv.rb
    
  • 将jEnv添加到bash概要文件

    if which jenv > /dev/null; then eval "$(jenv init -)"; fi
    
  • 当您第一次安装jEnv时,它将没有任何JDK与之关联

    例如,我刚刚安装了JDK 8,但jEnv不知道

    目前,它在系统上只找到Java版本(jre)。
    *
    显示当前选择的版本。与rvm和rbenv不同,jEnv无法为您安装JDK。您需要从Oracle网站手动安装JDK

  • 从苹果网站安装JDK 6。这将在
    /System/Library/Java/JavaVirtualMachines/
    中安装Java。我们从苹果网站安装Java 6的原因是SUN没有为MAC开发JDK 6,所以苹果创建/修改了自己的部署版本

  • 类似地安装JDK7和JDK8

  • 将jdk添加到jEnv

    JDK 6:

    JDK 7:

    JDK 8:

  • 检查使用jenv安装的java版本

  • 现在我们的系统上有3个Java版本

    jenv local <jenv version>
    
  • 检查java版本

    java版本

  • 就是这样。我们现在有多个java版本,可以轻松地在它们之间切换。jEnv还具有一些其他功能,如Gradle、Ant、Maven等的包装器,以及全局或本地设置JVM选项的能力。有关更多信息,请查看文档。

    jEnv on Mac Sierra:

    如果安装后无法工作,请执行此错误修复,将java可执行文件添加到path

    export PATH="$HOME/.jenv/shims:$PATH"
    
    尽管
    eval“$(jenv init-”
    可以完成这项工作。原因是/bin文件夹不再像主页中所描述的那样存在,而是将shim文件夹用作/bin

    • 确保~/.詹夫在那里
    • 哪个java
      可以打印/Library/
    • jenv全球1.8
    • jenv shell 1.8
    最终,
    哪种java
    为您提供了:

    /Users/xxxx/.jenv/chimes/java


    我发现这个Java版本管理器最近调用过,它的用法与其他语言的版本管理器非常相似,比如rvm(ruby)、nvm(node)、pyenv(python)等等。而且它是跨平台的,因此可以在Mac上使用

    安装后,它将在~/.jabba中创建一个dir,以放置您安装的所有Java版本
    jenv local oracle64-1.6.0.65
    
    export PATH="$HOME/.jenv/shims:$PATH"
    
    curl -sL https://github.com/shyiko/jabba/raw/master/install.sh | bash && . ~/.jabba/jabba.sh
    
    # install Oracle JDK
    jabba install 1.8 # "jabba use 1.8" will be called automatically  
    jabba install 1.7 # "jabba use 1.7" will be called automatically 
    
    # list all installed JDK's
    jabba ls
    
    # switch to a different version of JDK
    jabba use 1.8
    
    $ sdk list java
    Available Java Versions
       + 9ea170                                                                        
     > + 8u131                                                                         
         7u141-zulu                     
    
    $ sdk install java 7u141-zulu
    
    $ sdk use java 9ea170
    
    brew install jenv
    
    if which jenv > /dev/null; then eval "$(jenv init -)"; fi
    
    export PATH="$HOME/.jenv/shims:$PATH"
    
    brew tap caskroom/versions
    
    brew cask install java
    
    brew cask install java6
    #brew cask install java7
    #brew cask install java8
    
    ls -la /Library/Java/JavaVirtualMachines
    
    jenv add /Library/Java/JavaVirtualMachines/1.6.0___EXAMPLE___/Contents/Home
    jenv add /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk___EXAMPLE___/Contents/Home
    
    jenv versions
    
    jenv global XX
    
    java -version
    
    jenv versions
    
    jenv versions
    
    jenv global XX
    
    for version in 1.7 1.8; do
        v="${version: -1}"
        h=JAVA_"$v"_HOME
    
        export "$h"=$(/usr/libexec/java_home -v $version)
    
        alias "java$v"="export JAVA_HOME=\$$h"
    done
    
    jdk() {
        version=$1
        export JAVA_HOME=$(/usr/libexec/java_home -v"$version");
        java -version
     }
    
    export JAVA_HOME=$(/usr/libexec/java_home -v11); # Your default version
    
     jdk 9
     jdk 11
     jdk 13
    
    cd /usr/local/Cellar/maven/3.5.4/bin/
    nano mvn
    --Update JAVA_HOME -> "${JAVA_HOME:-$(/usr/libexec/java_home)}"
    mvn -version
    
    jdk() {
            version=$1
            export JAVA_HOME=$(/usr/libexec/java_home -v"$version");
            java -version
     }
    
    /usr/libexec/java_home -V
    
    Matching Java Virtual Machines (2):
    11.0.1, x86_64: "Java SE 11.0.1" /Library/Java/JavaVirtualMachines/jdk-11.0.1.jdk/Contents/Home
    1.8.0_201, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home
    
    java -version
    
    open ~/.bash_profile
    
    export JAVA_HOME=`/usr/libexec/java_home -v 1.8`