关于macos:Mac OS X和多个Java版本

Mac OS X and multiple Java versions

如何在MaOS上安装一个附加的Java?我安装了JDK8,效果很好。但现在我需要一个JDK7安装来进行开发。当试图通过DMG文件安装旧版本时,我得到一个警告,即已经安装了一个新版本的Java,安装程序退出了。

1
2
3
4
5
/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?

谢谢达基


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

Homebrew中,使用:

  • EDCOX1(4)安装Java的版本
  • EDCOX1(5)用于管理已安装的Java版本

如http://hanxue-it.blogspot.ch/2014/05/installing-java-8-managing-multiple.html所示,以下是要遵循的步骤。

  • 安装自制
  • 安装自制Jenv
  • 安装自制酒桶
  • 使用CASK安装特定Java版本(参见下面的"自制程序桶版本")
  • 添加此版本供Jenv管理
  • 检查版本是否由Jenv正确管理
  • 对于需要的Java版本,重复步骤4到6
  • 自制木桶版本

    使用以下方法将homebrew/cask-versions龙头添加到自制啤酒中:

    1
    brew tap homebrew/cask-versions

    然后您可以查看所有可用的版本:

    1
    brew search java

    然后您可以安装您喜欢的版本:

    1
    2
    brew cask install java7
    brew cask install java6

    并像往常一样将其添加到Jenv管理中。

    1
    jenv add <javaVersionPathHere>

    我认为这是最干净最简单的方法。

    另一个重要的注意事项,如Mac OS X.7.67 Java路径当前JDK混淆所述:

    For different types of JDKs or installations, you will have different
    paths

    You can check the paths of the versions installed using /usr/libexec/java_home -V, see How do I check if the Java JDK is installed on Mac?

    On Mac OS X Mavericks, I found as following:

    1) Built-in JRE default: /Library/Internet\
    Plug-Ins/JavaAppletPlugin.plugin/Contents/Home

    2) JDKs downloaded from Apple: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/

    3) JDKs downloaded from Oracle: /Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home

    资源

    • 从MAC中删除Java 8 JDK
    • http://hanxue-it.blogspot.ch/2014/05/installing-java-8-managing-multiple.html
    • 网址:http://sourabhbajaj.com/mac-setup/index.html
    • HTTP//BURW.SH
    • https://github.com/homebrew/homebrew/tree/master/share/doc/homebrew自述
    • http://sourabhbajaj.com/mac-setup/homebrew/readme.html
    • "BREW TAP"解释了https://github.com/homebrew/homebrew/blob/master/share/doc/homebrew/brew-tap.md
    • "BREW版本"说明了自制安装特定版本的公式?以及https://github.com/homebrew/homebrew-versions
    • https://github.com/caskroom/homebrew-cask
    • "CASK版本",类似于"BREW版本",请参见https://github.com/caskroom/homebrew-versions和https://github.com/caskroom/homebrew-cask/issues/9447
    • 网址:http://www.jenv.be
    • https://github.com/gcuisiner/jenv


    卸载JDK8,安装JDK7,然后重新安装JDK8。

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    export JAVA_7_HOME=$(/usr/libexec/java_home -v1.7)
    export JAVA_8_HOME=$(/usr/libexec/java_home -v1.8)
    export JAVA_9_HOME=$(/usr/libexec/java_home -v9)

    alias java7='export JAVA_HOME=$JAVA_7_HOME'
    alias java8='export JAVA_HOME=$JAVA_8_HOME'
    alias java9='export JAVA_HOME=$JAVA_9_HOME'

    #default java8
    export JAVA_HOME=$JAVA_8_HOME

    然后,只需在终端中键入java7java8,即可切换版本。

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


    对于Macos Sierra 420

    这本指南是从各种渠道(上面的回复以及其他帖子)拼凑而成的,效果很好。

    0。如果尚未安装,请安装自制。

    请参阅https://brew.sh/

    1。安装珍妮

    1
    brew install jenv

    2。将Jenv添加到bash配置文件中

    1
    if which jenv > /dev/null; then eval"$(jenv init -)"; fi

    三。将Jenv添加到您的路径中

    1
    export PATH="$HOME/.jenv/shims:$PATH"

    4。轻触"Caskroom/versions"

    仅供参考:"tap"扩展了BREW可安装的可用回购列表,超出了BREW的默认可用回购列表。

    1
    brew tap caskroom/versions

    5。安装最新版本的Java

    1
    brew cask install java

    6。安装Java 6(或7或8,无论你需要什么)

    1
    2
    3
    brew cask install java6
    #brew cask install java7
    #brew cask install java8

    ?也许关闭并重新启动终端,这样它可以看到任何新的env vars,并得到设置。

    7。检查安装

    所有Java版本都安装在这里:EDCOX1,0,让我们看一看。

    1
    ls -la /Library/Java/JavaVirtualMachines

    8。将每条路径一次添加到jenv。

    我们需要将"/contents/home"添加到版本文件夹。警告:使用计算机上的实际路径…这些只是例子

    1
    2
    jenv add /Library/Java/JavaVirtualMachines/1.6.0___EXAMPLE___/Contents/Home
    jenv add /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk___EXAMPLE___/Contents/Home

    9。检查Jenv注册是否正常

    1
    jenv versions

    10。设置Java版本使用(可全球化)

    其中xx与上面版本列表中的一个项目匹配。

    1
    jenv global XX

    检查Java版本

    1
    java -version

    检查Jenv版本

    还应指示当前版本与星号一起使用。

    1
    jenv versions

    完成快速未来参考

    更改Java版本

    …查看可用Java版本的列表

    1
    jenv versions

    …然后,其中xx与上面列表中的项目匹配

    1
    jenv global XX


    SDKMAN!是在Mac OS上使用Java、Gradle、Groovy、Kotlin和其他JVM工具的多个版本的伟大工具。安装和使用文件清楚地位于主现场。

    (我没有隶属关系,只是一个快乐的用户)。

    作为示例用法,如果在终端窗口中键入以下内容,则会有一个可用的JAVA SDK版本列表(为简洁而编辑):

    1
    2
    3
    4
    5
    $ sdk list java
    Available Java Versions
       + 9ea170                                                                        
     > + 8u131                                                                        
         7u141-zulu

    这里,+表示安装了版本。>表示当前正在使用的版本。要安装版本:

    1
    $ sdk install java 7u141-zulu

    要在此终端窗口中使用版本:

    1
    $ sdk use java 9ea170


    如本网站所示那么让我们从安装Jenv开始

  • 在终端运行这个

    1
    brew install https://raw.github.com/gcuisinier/jenv/homebrew/jenv.rb
  • 将Jenv添加到bash配置文件中

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

    例如,我刚安装了JDK8,但Jenv不知道。在JENV上检查Java版本

    目前,它只在系统上找到了Java版本(JRE)。*显示当前选择的版本。与RVM和RBENV不同,Jenv不能为您安装JDK。您需要从Oracle网站手动安装JDK。

  • 从苹果网站安装JDK 6。这将在EDCOX1 1中安装Java。我们从苹果网站安装Java 6的原因是Sun没有为苹果公司提供JDK 6,所以苹果创建/修改了自己的部署版本。

  • 同样,安装JDK7和JDK8。

  • 将JDK添加到Jenv。

    JDK 6:

    JDK 7:http://javahabi@javahabit.com/wp-content/uploads/2015/03/img_5518ab9bc47d4.png

    JDK 8:http://javahabi@javahabit.com/wp-content/uploads/2015/03/img_5518abb2c1217.png

  • 使用JEnV检查安装的Java版本

    http://javahabi@javahabit.com/wp-content/uploads/2015/03/img_5518abceb0deb.png

  • 所以现在我们的系统上有3个版本的Java。要设置默认版本,请使用命令

    1
    jenv local <jenv version>

    我想让JDK 1.6启动Intellij

    1
    jenv local oracle64-1.6.0.65
  • 检查Java版本

    Java版本http://javahabi@javahabit.com/wp-content/uploads/2015/03/img_5518abe376dd0.png

  • 就是这样。现在我们有了Java的多个版本,我们可以轻松地在它们之间切换。Jenv还具有一些其他特性,例如Gradle、Ant、Maven等的包装器,以及在全局或本地设置JVM选项的能力。有关详细信息,请参阅文档。


    我发现这个Java版本管理器最近被称为JABBA,它的使用非常类似于其他语言的版本管理器,如RVM(Ruby)、NVM(节点)、PyEnv(Python)等。它也是跨平台的,因此它绝对可以在MAC上使用。

    安装后,它将在~/.jabBA中创建一个DIR,以放置所有安装的Java版本。它支持Oracle JDK(默认)/Server JRE、Zulu OpenJDK(自0.3.0)、IBM SDK、Java技术版(自0.6)和自定义URL的安装。

    基本用法列在其GitHub上。要开始的快速摘要:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    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


    我使用的是Mac OS X 10.9.5。这就是当我需要一个版本来运行应用程序A并为应用程序B使用另一个版本时,如何在我的计算机上管理多个JDK/JRE。

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    #!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,在脚本后面附加上面的代码片段并保存它。一旦您的out类型source .profile,这将运行您的配置文件脚本,而不必重新启动终端。现在键入java -version,它应该显示1.7作为当前版本。如果您打算将其更改为1.8,则注释行setjdk jdk1.7.0_15.jdk,并取消注释行setjdk jdk1.8.0_60.jdk。保存脚本并使用source命令再次运行它。当我必须编译2个需要不同Java版本的不同Maven项目时,我使用这个机制来管理JDK/JRE的多个版本。


    麦卡塞拉上的珍妮弗:

    如果安装后不工作,请将此错误修复为将Java可执行文件添加到路径

    1
    export PATH="$HOME/.jenv/shims:$PATH"

    即使eval"$(jenv init -)"可以完成这项工作。原因是/bin文件夹不再存在,如其主页中所述,而是将shim文件夹用作/bin。

    • 确保~/.jenv在那里
    • which java可以打印/图书馆。
    • 詹妮全球1.8
    • 詹夫壳牌1.8

    最终,which java给了你:

    /Users/xxxx/.jenv/shims/java


    这里有一个更干燥的bash版本(基于vegard的答案)

    将1.7和1.8替换为您感兴趣的任何版本您将得到一个名为"javax"的别名,其中"x"是Java版本(下面的代码段中的7/8),这将允许您轻松地切换版本。

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