Mac OS X和多个Java版本


333

如何在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

Answers:


493

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

在内Homebrew,使用:

  • homebrew-cask 安装Java版本
  • jenv 管理Java的安装版本

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

  1. 安装自制软件
  2. 安装自制的Jenv
  3. 安装自制酒桶
  4. 使用桶安装特定的Java版本(请参见下面的“自制桶版本”一节)
  5. 添加此版本以供jenv管理
  6. 检查版本是否由jenv正确管理
  7. 对您需要的每个Java版本重复步骤4至6

自制酒桶版本

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

brew tap homebrew/cask-versions

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

brew search java

然后,您可以安装所需的版本:

brew cask install java7
brew cask install java6

并像往常一样将它们添加到由jenv管理。

jenv add <javaVersionPathHere>

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


Mac OS X 10.6.7 Java Path Current JDK中所述,要注意的另一重要事项是:

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

您可以使用来检查安装的版本的路径/usr/libexec/java_home -V,请参阅如何检查Mac上是否安装了Java JDK?

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

1)内置JRE默认值: /Library/Internet\ Plug-Ins/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


资源资源


16
值得一提的是,可以通过命令安装homebrew-cask brew install caskroom/cask/brew-cask而不是brew install caskEmacs插件。
Unnawut 2015年

7
在实施此解决方案时,我遇到了一些问题,其中一个是jenv返回No such file or directory.错误。这个维基帮助我解决了这个问题。github.com/gcuisinier/jenv/wiki/Trouble-Shooting
juil 2016年

10
我要补充一点,所有Java安装都将在其中,/Library/Java/JavaVirtualMachines/并且在添加它们时jenv add添加如下所示的路径/Library/Java/JavaVirtualMachines/[specific-version]/Contents/Home/。干杯!
Nikolay Tsenkov,

14
截至2017年6月23日,我运行了,brew cask search java7但是没有找到“ java7”的木桶。
Mingliang Liu

4
@MingliangLIU我也是...真的很烂。我在Github上发现了有关此问题的问题,因为他们提到了一些解决方法,但我无法使其正常工作。因此,我最终不得不通过Apple和oracle的“ Java版本下载和安装”网页以“手动方式”进行操作。然后使用/usr/libexec/java_home -V来仔细检查这些路径的安装位置。
艾德里安·

304

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

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

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在终端中切换版本即可。

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


18
到目前为止,这对我来说是最佳选择。只需简单的命令“ java8”或“ java7”即可轻松切换到任何版本。感谢您的帮助
MMHMasud

4
太好了!:)对于像我这样的人,您可以使用:ls / Library / Java / JavaVirtualMachines来查看可用的版本。然后,您可以打开不同的1.8.x版本。而且您还必须添加export PATH = $ JAVA_HOME / bin:$ PATH
Nico

4
谢谢你这个 我只想提一下,我已经通过在jdk8之后安装jdk7来做到这一点(无需卸载jdk8)。
泰特斯(Titus)

6
邓诺(Dunno)为什么我浪费时间使用jenv,因为这很有效,并且使用jenv init不会使您的shell启动混乱0.5s。
cvakiitho

2
如果您试图使Java 9以这种方式工作,那么Java 9的java_home的version参数应该只是9例如export JAVA_9_HOME=$(/usr/libexec/java_home -v9)
Dylan Nissley

125

对于macOS Sierra 420

这份指南从各种来源整理而来(上面以及其他帖子的答复),并且效果很好。

0.如果尚未安装homebrew。

参见https://brew.sh/

1.安装jenv

brew install jenv

2.将jenv添加到bash配置文件

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

3.将jenv添加到您的路径

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

4.点击“储藏室/版本”

仅供参考:“点击”扩展了Brew可以安装的可用仓库的列表,超出了brew的可用仓库的默认列表。

brew tap caskroom/versions

5.安装最新版本的Java

brew cask install java

6.安装Java 6(或您需要的7或8)

brew cask install java6
#brew cask install java7
#brew cask install java8

?也许关闭并重新启动Terminal,以便它看到已设置的所有新ENV变量。

7.查看安装

所有Java版本都安装在这里:/Library/Java/JavaVirtualMachines让我们看看。

ls -la /Library/Java/JavaVirtualMachines

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

我们需要在版本文件夹中添加“ / Contents / Home”。警告:请使用您计算机上的实际路径...这些只是EXAMPLE

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是否注册成功

jenv versions

10.设置要使用的Java版本(可替换)

其中XX与上面版本列表中的一项匹配。

jenv global XX

检查java版本

java -version

检查JENV版本

还应指出当前使用的版本带有星号。

jenv versions

完成


快速参考

更改Java版本

...请参阅可用的Java版本列表

jenv versions

...然后,其中XX与上面列表中的项目匹配

jenv global XX

1
此外,在brew cask install java*
挤压

1
逐步进行清晰清晰的说明。
Ritesh Singh,

1
错误:桶'java8'不可用:不存在具有此名称的桶。
Alexey Sh。

6
java8 / 9/10 arent可以作为木桶使用。改为尝试以下方法:“ brew cask install configureopenjdk / openjdk / adoptopenjdk8”
supi

1
brew tap caskroom/versions应该是brew tap homebrew/cask-versions
Vyacheslav Cotruta '19

42

SDKMAN!是在Mac OS上使用Java,Gradle,Groovy,Kotlin和其他JVM工具的多个版本的出色工具。安装和使用文档位于主站点上。

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

作为示例用法,如果我在“终端”窗口中键入以下内容,则会列出可用的Java SDK版本(为简洁起见进行了编辑):

$ sdk list java
Available Java Versions
   + 9ea170                                                                        
 > + 8u131                                                                         
     7u141-zulu                     

这里+表示已安装该版本。>表示当前正在使用哪个版本。要安装版本:

$ sdk install java 7u141-zulu

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

$ sdk use java 9ea170

sdkman支持从Java 1.7开始的版本。如果您愿意使用Java 1.6,则此解决方案可能不适合您。
AykutAkıncı18年

sdkman很棒,但是它们不支持某个版本中的特定发行版。例如,Datastax开发中心仅适用于1.8.0_151,但我无法使用sdkman进行指定。希望他们添加更多版本。
爱德华多·丹尼斯

如果您有本地版本,我想您可以将其安装到SDKMan-sdkman.io/usage#localversion(但我没有尝试过)
Michael Easter

6

正如在此网站上找到的, 让我们从安装jEnv开始

  1. 在终端中运行

    brew install https://raw.github.com/gcuisinier/jenv/homebrew/jenv.rb
  2. 将jEnv添加到bash配置文件

    if which jenv > /dev/null; then eval "$(jenv init -)"; fi
  3. 首次安装jEnv时,不会与它关联任何JDK。

    例如,我刚刚安装了JDK 8,但jEnv对此一无所知。在jEnv上检查Java版本

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

  4. 从Apple网站安装JDK 6。这将在中安装Java /System/Library/Java/JavaVirtualMachines/。我们从Apple网站安装Java 6的原因是SUN并未针对MAC提供JDK 6,因此Apple创建/修改了自己的部署版本。

  5. 同样,安装JDK7和JDK8。

  6. 将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

  7. 检查使用jenv安装的Java版本

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

  8. 因此,现在我们的系统上有3个Java版本。要设置默认版本,请使用以下命令

    jenv local <jenv version>

    例–我想让Jdk 1.6启动IntelliJ

    jenv local oracle64-1.6.0.65
  9. 检查java版本

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

而已。现在,我们有多个Java版本,我们可以在它们之间轻松切换。jEnv还具有其他一些功能,例如用于Gradle,Ant,Maven等的包装器,以及能够在全局或本地设置JVM选项的功能。查看文档以获取更多信息。


5
不要放置命令的图像,否则将很难复制/粘贴它们。要突出显示命令,请对单个单词或简短命令使用反引号“`”,或在命令的一行上以4个空格(或列表中4的倍数)缩进命令。

1
谢谢关 我正在努力发布图像,并花了很长时间尝试格式化,但无法正确完成。感谢您分享反引号信息。
Dinesh Arora

4
我认为您可能已经使用过四次相同的图像。
Ellen Spertus '18

5

我最近发现了这个名为Jabba的 Java版本管理器,其用法与其他语言的版本管理器非常相似,例如rvm(ruby),nvm(node),pyenv(python)等。它也是跨平台的,因此绝对可以在以下平台上使用苹果电脑。

安装后,它将在〜/ .jabba中创建一个目录,以放置您安装的所有Java版本。它“支持从自定义URL安装Oracle JDK(默认)/ Server JRE,Zulu OpenJDK(自0.3.0起),IBM SDK,Java Technology Edition(自0.6.0起)。”。

基本用法列在其Github上。快速总结:

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

4

我正在使用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,将脚本与上面的代码段一起添加并保存。输入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的多个版本。


3

Mac Sierra上的Jenv:

如果安装后无法正常工作,请执行此错误修复以将Java可执行文件添加到路径

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

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

  • 确保〜/ .jenv在那
  • which java 可以打印/ Library / ...
  • jenv全球1.8
  • jenv外壳1.8

最终,which java为您提供:

/用户/xxxx/.jenv/shims/java


3

与@Vegard相同的精神(轻量级):

  • 使用Homebrew安装所需的JDK
  • 将此jdkbash函数和默认值放入您的.profile

    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,您可以

     jdk 9
     jdk 11
     jdk 13

基于https://github.com/AdoptOpenJDK/homebrew-openjdk


0

这是bash的更干燥版本(基于Vegard的回答)

用您感兴趣的任何版本替换1.7和1.8,您将获得一个名为“ javaX”的别名;其中“ X”是Java版本(以下代码段中为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

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.