405

如何在 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 除了这个怎么安装?

4

18 回答 18

568

在 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. 使用 cask 安装特定的 java 版本(请参阅下面的“homebrew-cask 版本”段落)
  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,请参阅如何检查 Java JDK 是否安装在 Mac 上?

在 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


资源

于 2015-03-22T14:53:21.647 回答
364

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

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

于 2014-10-08T09:02:32.067 回答
151

适用于 macOS Sierra 420

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

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

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. 点击“caskroom/versions”

仅供参考:“Tap”扩展了 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

? 也许关闭并重新启动终端,以便它看到任何已设置的新 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是否注册OK

jenv versions

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

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

jenv global XX

检查java版本

java -version

检查 jenv 版本

还应该用星号表示当前使用的版本。

jenv versions

完毕


快速的未来参考

更改 java 版本

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

jenv versions

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

jenv global XX
于 2017-12-07T16:49:30.177 回答
52

开发者!是在 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
于 2017-07-16T23:27:03.593 回答
8

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

/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

请注意,有两个可用的 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

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

open ~/.bash_profile

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

切换到 Java 版本 8

export JAVA_HOME=`/usr/libexec/java_home -v 1.8`

保存并关闭文件。

于 2021-02-21T12:51:14.757 回答
7

正如在这个网站上找到的 所以让我们从安装 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。这将在/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 选项的能力。查看文档以获取更多信息。

于 2016-07-20T03:01:41.607 回答
6

我最近发现了这个叫做Jabba的Java 版本管理器,它的用法与其他语言的版本管理器非常相似,比如 rvm(ruby)、nvm(node)、pyenv(python) 等。而且它是跨平台的,所以绝对可以在苹果电脑。

安装后,它会在 ~/.jabba 中创建一个目录来放置您安装的所有 Java 版本。它“支持安装 Oracle JDK(默认)/Server JRE、Zulu OpenJDK(自 0.3.0 起)、IBM SDK、Java 技术版(自 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
于 2017-04-26T20:19:31.700 回答
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

我把上面的脚本放在 .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 版本的 2 个不同的 Maven 项目时,我使用这种机制来管理多个版本的 JDK/JRE。

于 2015-09-18T22:47:59.483 回答
5

本着与@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

于 2020-02-27T12:30:58.933 回答
4

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给你:

/Users/xxxx/.jenv/shims/java

于 2016-10-31T01:06:40.800 回答
4

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

  1. 使用以下命令安装自制软件

    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
    
  2. 安装 jenv 并激活 jenv

    brew install jenv
    
    echo 'eval "$(jenv init -)"' >> ~/.bash_profile
    
  3. Tap cask-versions

    brew tap homebrew/cask-versions
    
  4. 搜索可以安装的可用java版本

    brew search java
    
  5. 例如安装 java6 使用以下命令

    brew install cask java6
    
  6. 在 jenv 中添加多个版本的 java

    jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home
    
    jenv add /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
    

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

   mkdir -p /Users/<username>/.jenv/versions/oracle64-1.8.0.231
  1. 添加jdk后重新hash jenv

    jenv rehash
    
  2. 列出已知版本的 java 到 jenv

    jenv versions
    
  3. 设置默认版本

    jenv global oracle64-1.8.0.231
    
  4. 更改项目的 java 版本

    jenv local oracle64-1.6.0.65
    
  5. 将 JAVA_HOME 设置为与 jenv 相同的版本

    jenv exec bash
    
    echo $JAVA_HOME
    
于 2021-01-26T13:37:27.927 回答
3

我最近回答了,我真的建议您使用SDKMAN而不是 Homebrew。

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

Mac 中的 Java

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

要在你的 mac 中安装一个版本,你可以运行命令 sdk install java 15.0.0.j9-adpt 命令

于 2020-10-22T09:43:56.537 回答
0

这是 bash 的更 DRY 版本(基于 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
于 2018-04-05T12:51:05.573 回答
0

要安装更新版本的 OpenJDK,我使用它。OpenJDK 14 的示例:

brew info adoptopenjdk
brew tap adoptopenjdk/openjdk
brew cask install adoptopenjdk14

有关当前信息,请参阅https://github.com/AdoptOpenJDK/homebrew-openjdk

于 2020-05-20T16:34:23.077 回答
0

我按照以下链接中的步骤操作 - https://medium.com/@euedofia/fix-default-java-version-on-maven-on-mac-os-x-156cf5930078它对我有用。

cd /usr/local/Cellar/maven/3.5.4/bin/
nano mvn
--Update JAVA_HOME -> "${JAVA_HOME:-$(/usr/libexec/java_home)}"
mvn -version
于 2020-10-22T09:04:50.850 回答
0

通过 Homebrew 安装 Java 的新命令:

  • brew cask install adoptopenjdk/openjdk/adoptopenjdk8
  • brew cask install adoptopenjdk/openjdk/adoptopenjdk11

有关最新命令,请参阅homebrew-openjdk 存储库。

安装 Java

您可以通过 Homebrew、Jabba、SDKMAN 或手动安装 Java。有关所有命令的详细信息,请参阅此答案

切换 Java 版本*

您可以使用jenv Jabba、SDKMAN 或手动切换 Java 版本。在此处查看所有切换命令的详细信息。

最佳解决方案

  • Jabba 旨在在多个平台上工作,因此如果您想要一个也可以在 Windows 上工作的解决方案,它是一个不错的选择
  • 使用 Homebrew 下载 Java 版本并使用 jenv 切换版本提供了一个很好的工作流程。jenv 可以轻松处理存储在计算机上任何目录中的 Java 版本,因此如果您有兴趣将 Java 存储在非默认目录中,它是一个不错的选择。
  • 使用 SDKMAN 下载 Java 和切换版本是另一个不错的选择
  • 应该避免手动切换,因为这是一个不必要的头痛。

手动切换Java版本的功能

这是用于手动切换 Java 版本的 Bash / ZSH 函数(通过OpenJDK):

jdk() {
        version=$1
        export JAVA_HOME=$(/usr/libexec/java_home -v"$version");
        java -version
 }

切换 Java 版本有很多很棒的工具,所以我强烈建议不要手动操作。

于 2020-11-08T12:42:38.070 回答
0

这是一个很棒的教程 https://medium.com/@chamikakasun/how-to-manage-multiple-java-version-in-macos-e5421345f6d0 使用 brew 安装的 jEnv

或者您可以使用 brew Tap查看 homebrew-openjdk https://github.com/AdoptOpenJDK/homebrew-openjdk管理版本

于 2021-03-05T10:46:58.877 回答
0

我知道这个问题已经有很多答案了,但我只想分享我的解决方案,只使用 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
}

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 示例

享受

于 2021-12-29T03:47:53.637 回答