Mac OS X和多个Java版本

Dak*_*kar 294 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_20.jdk/Contents/Home

   /Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk/Contents/Home
Run Code Online (Sandbox Code Playgroud)

除了这个之外,如何安装jdk7?

谢谢
Dakky

Adr*_* Be 444

在Mac上管理多个Java版本的最简洁方法是使用Homebrew.

在内Homebrew,使用:

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

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

  1. 安装自制软件
  2. 安装homebrew jenv
  3. 安装homebrew-cask
  4. 使用cask安装特定的java版本(参见下面的"homebrew-cask版本"段落)
  5. 为jenv添加此版本以管理它
  6. 检查版本是否由jenv正确管理
  7. 为您需要的每个Java版本重复步骤4到6

homebrew-cask版本

homebrew/cask-versions使用以下方法将点击添加到自制程序:

brew tap homebrew/cask-versions
Run Code Online (Sandbox Code Playgroud)

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

brew search java
Run Code Online (Sandbox Code Playgroud)

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

brew cask install java7
brew cask install java6
Run Code Online (Sandbox Code Playgroud)

并像往常一样将它们添加到jenv管理中.

jenv add <javaVersionPathHere>
Run Code Online (Sandbox Code Playgroud)

我认为这是最简洁,最简单的方法.


另一个需要注意的重要事项,如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


资源

  • 值得一提的是,homebrew-cask可以使用命令`brew install caskroom/cask/brew-cask`而不是'brew install cask`来安装,这是一个Emacs插件. (16认同)
  • 截至2017年6月23日,我运行`brew cask search java7`但是找到了"java7"的No Cask. (13认同)
  • 我想补充一点,所有java安装都在`/ Library/Java/JavaVirtualMachines /`中,当用`jenv add`添加它们时,你添加一个看起来像这样的路径`/ Library/Java/JavaVirtualMachines/[specific-version]/Contents /首页/`.干杯! (9认同)
  • 我在实现这个解决方案时遇到了一些问题,其中一个是`jenv`返回`没有这样的文件或目录.错误.这个wiki帮我解决了这个问题.https://github.com/gcuisinier/jenv/wiki/Trouble-Shooting (6认同)
  • @MingliangLIU是的我也是......真的很糟糕.我在Github上发现了有关这方面的问题,他们提到了一些工作但是我无法让它工作.所以我最终不得不通过apple和oracle的"Java版本下载和安装"网页"手动方式".然后使用`/ usr/libexec/java_home -V`来仔细检查安装它们的路径. (4认同)
  • `$brew install --cask java8` 现在给出`错误:Cask 'java8' 不可用:不存在具有此名称的 Cask。` `brew search java` 实际上列出了 `java6`,但既没有列出 `java7` 也没有列出 `java8`! (3认同)
  • 步骤2.5.`$ eval"$(jenv init - )"`根据链接页面. (2认同)

Veg*_*ard 270

卸载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
Run Code Online (Sandbox Code Playgroud)

然后您只需键入java7java8在终端中切换版本.

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

  • 到目前为止,这对我来说是最好的选择.只需一个简单的命令"java8"或"java7"即可轻松切换到任何版本.谢谢您的帮助 (17认同)
  • Dunno为什么我浪费了jenv的时间,因为这只是工作,并且不会使用jenv init将你的shell启动混乱0.5s. (5认同)
  • 好极了!:)对于像我这样的其他人,你可以使用:ls/Library/Java/JavaVirtualMachines来查看哪些版本可用.然后您可以打开不同的1.8.x版本.而且你还必须添加export PATH = $ JAVA_HOME/bin:$ PATH (4认同)
  • 谢谢你.我只是想提一下,我已经设法通过在jdk8之后安装jdk7来实现这一点(不需要卸载jdk8). (4认同)
  • 很好的解决方案! (3认同)
  • 如果你试图让java 9以这种方式工作,java_home for java 9的version参数应该只是`9`,例如`export JAVA_9_HOME = $(/ usr/libexec/java_home -v9)` (2认同)
  • 这应该是公认的答案,比安装无关软件要简单得多,特别是如果您使用的是企业管理的 Mac,在那里可以安装的软件有限制。 (2认同)

bob*_*bob 110

对于macOS Sierra 420

本指南是从各种来源拼凑而成的(上面的回复以及其他帖子),并且完美无缺.

0.如果还没有,请安装自制软件.

https://brew.sh/

1.安装jenv

brew install jenv
Run Code Online (Sandbox Code Playgroud)

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

if which jenv > /dev/null; then eval "$(jenv init -)"; fi
Run Code Online (Sandbox Code Playgroud)

3.将jenv添加到您的路径中

export PATH="$HOME/.jenv/shims:$PATH"
Run Code Online (Sandbox Code Playgroud)

4.点击"caskroom/versions"

仅供参考:"Tap"扩展了brew可以安装的可用回购列表,超出了Brew的默认可用回购列表.

brew tap caskroom/versions
Run Code Online (Sandbox Code Playgroud)

5.安装最新版本的java

brew cask install java
Run Code Online (Sandbox Code Playgroud)

6.安装java 6(或者你需要的7或8)

brew cask install java6
#brew cask install java7
#brew cask install java8
Run Code Online (Sandbox Code Playgroud)

?也许关闭并重新启动终端,以便它看到任何新的ENV变量设置.

7.检查安装

这里安装了所有Java版本:/Library/Java/JavaVirtualMachines让我们一起来看看.

ls -la /Library/Java/JavaVirtualMachines
Run Code Online (Sandbox Code Playgroud)

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

我们需要在版本文件夹中添加"/ Contents/Home".警告:使用你的机器上的实际路径......这些只是示例

jenv add /Library/Java/JavaVirtualMachines/1.6.0___EXAMPLE___/Contents/Home
jenv add /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk___EXAMPLE___/Contents/Home
Run Code Online (Sandbox Code Playgroud)

9.检查jenv是否已注册OK

jenv versions
Run Code Online (Sandbox Code Playgroud)

10.设置要使用的java版本(全球)

其中XX匹配上面版本列表中的一个项目.

jenv global XX
Run Code Online (Sandbox Code Playgroud)

检查java版本

java -version
Run Code Online (Sandbox Code Playgroud)

检查jenv版本

还应指出当前版本与星号一起使用.

jenv versions
Run Code Online (Sandbox Code Playgroud)

DONE


快速的未来参考

要更改java版本

...查看可用的Java版本列表

jenv versions
Run Code Online (Sandbox Code Playgroud)

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

jenv global XX
Run Code Online (Sandbox Code Playgroud)

  • java8 / 9/10 arent可以作为木桶使用。尝试以下方法:“ brew cask install configureopenjdk / openjdk / adoptopenjdk8” (4认同)
  • `brew tap caskroom/versions` 应该是 `brew tap homebrew/cask-versions` (3认同)
  • 错误:Cask 'java8' 不可用:不存在同名的 Cask。 (2认同)

Mic*_*ter 37

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

(我没有联盟,只是一个快乐的用户).

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

$ sdk list java
Available Java Versions
   + 9ea170                                                                        
 > + 8u131                                                                         
     7u141-zulu                     
Run Code Online (Sandbox Code Playgroud)

+表示已安装该版本.>表示当前正在使用的版本.要安装版本:

$ sdk install java 7u141-zulu
Run Code Online (Sandbox Code Playgroud)

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

$ sdk use java 9ea170
Run Code Online (Sandbox Code Playgroud)

  • 这对我来说是完美的解决方案。谢谢。我对 jenv 的工作方式不满意(或者在我的情况下缺乏工作),但发现这是 sdkman 为我完成工作,允许我在 sublime 3 中运行 LSP-Metal 并编写 scala 代码。 (3认同)

hul*_*ius 9

本着与@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
    
    Run Code Online (Sandbox Code Playgroud)
  • 然后,要切换你的jdk,你可以这样做

     jdk 9
     jdk 11
     jdk 13
    
    Run Code Online (Sandbox Code Playgroud)

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


Din*_*ora 7

正如在本网站找到的 那样,让我们​​从安装jEnv开始

  1. 在终端中运行它

    brew install https://raw.github.com/gcuisinier/jenv/homebrew/jenv.rb
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将jEnv添加到bash配置文件中

    if which jenv > /dev/null; then eval "$(jenv init -)"; fi
    
    Run Code Online (Sandbox Code Playgroud)
  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>
    
    Run Code Online (Sandbox Code Playgroud)

    前 - 我希望Jdk 1.6启动IntelliJ

    jenv local oracle64-1.6.0.65
    
    Run Code Online (Sandbox Code Playgroud)
  9. 检查java版本

    java -version HTTP://javahabi@javahabit.com/wp-content/uploads/2015/03/img_5518abe376dd0.png

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

  • 不要放置命令的图像,这使得复制/粘贴它们变得困难.要突出显示命令,请对单个单词或短命令使用反引号"`",或者在自己的行中使用4个空格缩进命令(或列表中的4的倍数). (3认同)
  • 我想你可能已经使用了相同的图像四次. (3认同)

May*_*yur 7

使用 jenv 管理 MAC 中的多个 java 版本

\n
    \n
  1. 使用以下命令安装自制程序

    \n
    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"\n
    Run Code Online (Sandbox Code Playgroud)\n
  2. \n
  3. 安装jenv并激活jenv

    \n
    brew install jenv\n\necho \'eval "$(jenv init -)"\' >> ~/.bash_profile\n
    Run Code Online (Sandbox Code Playgroud)\n
  4. \n
  5. 龙头桶版本

    \n
    brew tap homebrew/cask-versions\n
    Run Code Online (Sandbox Code Playgroud)\n
  6. \n
  7. 搜索可以安装的可用java版本

    \n
    brew search java\n
    Run Code Online (Sandbox Code Playgroud)\n
  8. \n
  9. 例如要安装 java6 使用以下命令

    \n
    brew install cask java6\n
    Run Code Online (Sandbox Code Playgroud)\n
  10. \n
  11. jenv中添加多个版本的java

    \n
    jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home\n\njenv add /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home\n
    Run Code Online (Sandbox Code Playgroud)\n
  12. \n
\n

注意:- 如果出现类似 的错误ln: /Users/<username>/.jenv/versions/oracle64-1.8.0.231: No such file or directory,请运行以下命令:-

\n
   mkdir -p /Users/<username>/.jenv/versions/oracle64-1.8.0.231\n
Run Code Online (Sandbox Code Playgroud)\n
    \n
  1. 添加 jdk\xe2\x80\x99s 后重新哈希 jenv

    \n
    jenv rehash\n
    Run Code Online (Sandbox Code Playgroud)\n
  2. \n
  3. 列出 jenv 的已知 java 版本

    \n
    jenv versions\n
    Run Code Online (Sandbox Code Playgroud)\n
  4. \n
  5. 设置默认版本

    \n
    jenv global oracle64-1.8.0.231\n
    Run Code Online (Sandbox Code Playgroud)\n
  6. \n
  7. 更改项目的java版本

    \n
    jenv local oracle64-1.6.0.65\n
    Run Code Online (Sandbox Code Playgroud)\n
  8. \n
  9. 将JAVA_HOME设置为与jenv相同的版本

    \n
    jenv exec bash\n\necho $JAVA_HOME\n
    Run Code Online (Sandbox Code Playgroud)\n
  10. \n
\n


Cha*_*att 5

我使用的是 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
Run Code Online (Sandbox Code Playgroud)

我把上面的脚本放在 .profile 文件中。只需打开终端,输入 vi .profile,将上述代码片段附加到脚本中并保存。一旦您输入了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 的多个版本。


Cod*_*mer 5

Mac Sierra 上的 Jenv:

如果安装后不起作用,请修复此错误以将 java 可执行文件添加到路径

export PATH="$HOME/.jenv/shims:$PATH"
Run Code Online (Sandbox Code Playgroud)

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

  • 确保 ~/.jenv 存在
  • which java可以打印/Library/...
  • jenv 全局 1.8
  • jenv 外壳 1.8

最终,which java给你:

/Users/xxxx/.jenv/shims/java


Yor*_*ang 5

我发现这个Java版本管理器最近被称为Jabba,其用法非常类似于其他语言的版本管理器,如rvm(ruby),nvm(node),pyenv(python)等.它也是跨平台所以它绝对可以用于苹果电脑.

安装完成后,它会在〜/ .jabba中创建一个dir来放置你安装的所有Java版本.它"支持安装Oracle JDK(默认)/ Server JRE,Zulu OpenJDK(自0.3.0起),IBM SDK,Java Technology Edition(自0.6.0起)以及自定义URL."

基本用法列在他们的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
Run Code Online (Sandbox Code Playgroud)


bdz*_*aid 5

我最近回答了这个问题,我真的建议你使用SDKMAN而不是 Homebrew。

使用 SDKMAN,您可以在 Mac 上轻松安装不同版本的 JAVA,并从一个版本切换到另一个版本。

Mac 中的 Java

您还可以将 SDKMAN 用于 ANT、GRADLE、KOTLIN、MAVEN、SCALA 等...

要在 Mac 上安装版本,您可以运行命令 sdk install java 15.0.0.j9-adpt 指令

  • @Exploring jenv 也是一个不错的选择,sdkman 还包括 kotlin、gradle、maven、ant、asciidotorJ 和开发人员所需的许多其他工具 (2认同)

Tan*_*ury 5

首先,您需要确保安装了多个 JAVA 版本。打开一个新的终端窗口并输入:

/usr/libexec/java_home -V
Run Code Online (Sandbox Code Playgroud)

您的输出应如下所示:

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
Run Code Online (Sandbox Code Playgroud)

请注意,有两个 JDK 可用。如果您没有注意到需要切换到的 Java 版本,请从此处下载并安装相应的版本(JDK 8 表示为 1.8)。安装相应的 JDK 后,请重复此步骤。

  1. 记下要切换到的 JDK 版本。例如,“11.0”和“1.8”是上例中可用的JDK版本。

  2. 切换到所需的版本。例如,如果您希望切换到 JDK 8,请输入以下行:

    导出 JAVA_HOME=/usr/libexec/java_home -v 1.8

对于 11.0,将“1.8”切换为“11.0” 4. 通过在终端中输入来检查您的 JDK 版本:

java -version
Run Code Online (Sandbox Code Playgroud)

如果您已正确执行所有步骤,则 JDK 版本应与您在上一步中指定的版本相关联。5.(可选)要使其成为默认的 JDK 版本,请在终端中输入以下内容:

open ~/.bash_profile
Run Code Online (Sandbox Code Playgroud)

然后,将步骤 3 中的终端输入添加到此文件中:

切换到 Java 版本 8

export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
Run Code Online (Sandbox Code Playgroud)

保存并关闭文件。


Níc*_*mer 5

我知道这个问题已经有很多答案,但我只想分享我仅使用 Temurin 和 bash 的解决方案。

AdoptOpenJdk已被弃用,这就是我使用Temurin的原因。


1.使用镜像或包管理器下载 Temurin

$ brew install --cask temurin

对于其他版本(如 Java 8):

$ brew tap homebrew/cask-versions

$ brew install --cask temurin8


2.将 bash 脚本添加到您的 bash 配置文件中

打开您的~/.zshrc~/.bash_profile(取决于您使用的用途)

并添加这段代码:

set-jdk() {
    jdkversion=$1
    export JAVA_HOME=/Library/Java/JavaVirtualMachines/temurin-"$jdkversion".jdk/Contents/Home;
    export PATH=$PATH:$JAVA_HOME/bin;
    java -version
}
Run Code Online (Sandbox Code Playgroud)

3.重新启动终端并更改 Java 版本

$ set-jdk NN 是您想要的并且已经安装的 Java 版本

例如 $ set-jdk 8更改为Java 8 / 1.8


几点考虑:

  • 它只会在您使用该set-jdk命令的终端会话上保留 Java 版本
  • 它不会将 Java 版本设置为全局
  • 当您想将 JAVA_HOME 添加到另一个脚本/应用程序中时,您可以设置/Library/Java/JavaVirtualMachines/temurin-<version>.jdk/Contents/Home(更改所需的 Java 版本。就像这个JD-GUI 示例

享受


Dan*_*cki 5

截至2023brew install --cask zulu8在芯片上对我不起作用Applebrew install openjdk@8也没有没有。唯一对我有用的解决方案是brew install --cask adoptopenjdk8然后当然vim ~/.zshrc是在里面:

export JAVAC_HOME=/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/
export JAVA_11_HOME=$(/usr/libexec/java_home -v11)
export JAVA_8_HOME=$(/usr/libexec/java_home -v1.8)
alias javac8='export JAVA_HOME=$JAVAC_HOME'
alias java11='export JAVA_HOME=$JAVA_11_HOME'
alias java8='export JAVA_HOME=$JAVA_8_HOME'
Run Code Online (Sandbox Code Playgroud)

从终端使用切换javac8到新安装的(不同)版本。注意:你可以有Java与我不同的版本,所以这只是一个例子。

编辑:由于某种原因,激活后需要一些时间。在我看来,需要重新启动笔记本电脑。

  • 这非常有帮助,谢谢。仅供参考,如果您运行“brew tap homebrew/cask-versions”,那么它将更新您可用的木桶,然后您可以安装两个 Zulu 版本。它适用于我的 Mac M1。`brew install --cask zulu8` 和 `brew install --cask zulu11` (2认同)