ChatGPT解决这个技术问题 Extra ChatGPT

Mac OS X 和多个 Java 版本

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

警告:热门答案推荐的 Homebrew Java 安装命令不再起作用。请参阅我对最新命令或 this amazing answer 的回答,其中包含所有最新命令以及不同方法的详细说明。

I
Interlated

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

Homebrew 内,使用:

homebrew-cask 安装 java 的版本

jenv 管理已安装的 java 版本

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

安装 homebrew install homebrew jenv install homebrew-cask 使用 cask 安装特定的 java 版本(请参阅下面的“homebrew-cask 版本”段落)为 jenv 添加此版本以对其进行管理 检查版本是否由 jenv 正确管理 为每个重复步骤 4 到 6你需要的java版本

自制桶版本

使用以下命令将 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 confusing 中所述:

对于不同类型的 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

资源

从 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://brew.sh

https://github.com/Homebrew/homebrew/tree/master/share/doc/homebrew#readme

http://sourabhbajaj.com/mac-setup/Homebrew/README.html

“brew tap”解释 https://github.com/Homebrew/homebrew/blob/master/share/doc/homebrew/brew-tap.md

“brew 版本”解释 Homebrew 安装特定版本的公式?还有 https://github.com/Homebrew/homebrew-versions

https://github.com/caskroom/homebrew-cask

“桶版本”,类似于“酿造版本”,请参阅 https://github.com/caskroom/homebrew-versions 和 https://github.com/caskroom/homebrew-cask/issues/9447

http://www.jenv.be

https://github.com/gcuisinier/jenv


值得一提的是 homebrew-cask 可以使用命令 brew install caskroom/cask/brew-cask 而不是 Emacs 插件的 brew install cask 安装。
我在实施此解决方案时遇到了一些问题,其中之一是 jenv 返回 No such file or directory. 错误。这个 wiki 帮我解决了这个问题。 github.com/gcuisinier/jenv/wiki/Trouble-Shooting
我要补充一点,所有 java 安装都在 /Library/Java/JavaVirtualMachines/ 中,当使用 jenv add 添加它们时,您添加的路径类似于 /Library/Java/JavaVirtualMachines/[specific-version]/Contents/Home/。干杯!
截至 2017 年 6 月 23 日,我运行 brew cask search java7 但没有找到“java7”的木桶。
@MingliangLIU 是的,我也是……这真的很糟糕。我在 Github 上发现了这方面的问题,他们提到了一些解决方法,但我无法让它工作。所以我最终不得不通过苹果和 oracle 的“Java 版本下载和安装”网页“手动方式”进行操作。然后使用 /usr/libexec/java_home -V 仔细检查这些安装的路径。
V
Vegard

卸载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 改进)


到目前为止,这对我来说是最好的选择。只需一个简单的命令“java8”或“java7”即可轻松切换到任何版本。谢谢您的帮助
伟大的 ! :) 对于像我这样的其他人,您可以使用:ls /Library/Java/JavaVirtualMachines 查看哪些版本可用。然后您可以打开不同的 1.8.x 版本。而且您还必须添加 export PATH=$JAVA_HOME/bin:$PATH
谢谢这个。我只想提一下,我已经通过在 jdk8 之后安装 jdk7 来做到这一点(无需卸载 jdk8)。
不知道为什么我在 jenv 上浪费了我的时间,因为这很有效,并且不会用 jenv init 将你的 shell 启动时间缩短 0.5 秒。
如果你试图让 java 9 以这种方式工作,java 9 的 java_home 的版本参数应该只是 9 例如 export JAVA_9_HOME=$(/usr/libexec/java_home -v9)
b
bob

适用于 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”添加到版本文件夹中。警告:使用您机器上的实际路径...这些只是示例

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

此外,在 brew cask install java* 之后重新启动您的终端
一步一步清晰而精彩的解释。
错误:木桶“java8”不可用:不存在同名木桶。
java8/9/10 不再可用作木桶。试试这个:“ brew cask install 采用openjdk/openjdk/adoptopenjdk8 ”
brew tap caskroom/versions 应该是 brew tap homebrew/cask-versions
M
Michael Easter

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,此解决方案可能不适合您。
sdkman 很棒,但它们不支持版本中的特定版本。例如,Datastax 开发中心仅适用于 1.8.0_151,但我无法使用 sdkman 指定它。希望他们添加更多版本。
如果您有本地版本,我认为您可以将其安装到 SDKMan - sdkman.io/usage#localversion(但我没有尝试过)
这对我来说是完美的解决方案。谢谢你。我对 jenv 的工作方式(或者在我的情况下缺乏工作)不满意,但发现这是 sdkman 为我完成工作,允许我在 sublime 3 和代码 scala 中运行 LSP-Metal。
T
TanvirChowdhury

首先,您需要确保安装了多个 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 版本,请从此处下载并安装相应的版本 https://www.oracle.com/java/technologies/downloads/(JDK 8 表示为 1.8)。安装适当的 JDK 后,重复此步骤。

记下要切换到的 JDK 版本。例如,“11.0”和“1.8”是上例中可用的 JDK 版本。切换到所需的版本。例如,如果您希望切换到 JDK 8,请输入以下行:export 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`

保存并关闭文件。


您的意思是包含“从此处下载并安装适当的链接”的链接吗?
D
Dinesh Arora

正如在 website 上发现的那样,让我们从安装 jEnv 开始

在终端运行这个 brew install https://raw.github.com/gcuisinier/jenv/homebrew/jenv.rb 将 jEnv 添加到 bash 配置文件 if which jenv > /dev/null;然后 eval "$(jenv init -)"; fi 当你第一次安装 jEnv 时不会有任何与之关联的 JDK。例如,我刚刚安装了 JDK 8,但 jEnv 不知道。检查 jEnv 上的 Java 版本 目前它只在系统上找到 Java 版本(jre)。 * 表示当前选择的版本。与 rvm 和 rbenv 不同,jEnv 无法为您安装 JDK。您需要从 Oracle 网站手动安装 JDK。从 Apple 网站安装 JDK 6。这将在 /System/Library/Java/JavaVirtualMachines/ 中安装 Java。我们从 Apple 网站安装 Java 6 的原因是 SUN 没有为 MAC 提供 JDK 6,因此 Apple 创建/修改了自己的部署版本。同样安装JDK7和JDK8。将 JDK 添加到 jEnv。 JDK 6: JDK 7: JDK 8: 检查使用 jenv 安装的 java 版本 所以现在我们的系统上有 3 个版本的 Java。要设置默认版本,请使用命令 jenv local Ex – 我希望 Jdk 1.6 启动 IntelliJ jenv local oracle64-1.6.0.65 检查 java 版本 java -version

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


不要放置命令的图像,复制/粘贴它们会很困难。要突出显示命令,请对单个单词或短命令使用反引号“`”,或者在自己的行上使用 4 个空格(或列表中 4 的倍数)缩进您的命令。
谢谢塞基。我正在努力发布图像并花了很长时间尝试格式化但无法正确处理。感谢您分享反引号信息。
我想你可能已经使用了四次相同的图像。
Y
York Yang

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

安装后,它会在 ~/.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

h
hulius

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

使用 Homebrew 安装所需的 JDK

将此 jdk bash 函数和默认值放入您的 .profile jdk() { version=$1 export JAVA_HOME=$(/usr/libexec/java_home -v"$version"); java -version } 导出 JAVA_HOME=$(/usr/libexec/java_home -v11); # 你的默认版本

然后,要切换你的 jdk,你可以做 jdk 9 jdk 11 jdk 13

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


J
Johny T Koshy

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

使用以下命令安装自制软件 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" install jenv 并激活 jenv brew install jenv echo 'eval " $(jenv init -)"' >> ~/.bash_profile tap cask-versions brew tap homebrew/cask-versions search available java version that can be installed brew search java 例如安装 java6 使用以下命令 brew install cask java6 添加多个版本jenv 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

添加 jdk 的 jenv 后重新哈希 jenv 列出已知的 java 版本到 jenv jenv 版本 设置默认版本 jenv 全局 oracle64-1.8.0.231 更改项目的 java 版本 jenv 本地 oracle64-1.6.0.65 设置 JAVA_HOME 与 jenv 相同的版本 jenv exec bash回声 $JAVA_HOME


C
ChaitanyaBhatt

我正在使用 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。


C
CodeFarmer

Mac Sierra 上的 Jenv:

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

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

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

确保 ~/.jenv 存在

哪个java可以打印/Library/...

jenv 全球 1.8

jenv 外壳 1.8

最终,which java 为您提供:

/Users/xxxx/.jenv/shims/java


b
bdzzaid

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

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

https://i.stack.imgur.com/Xoww2.png

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

https://i.stack.imgur.com/AWd2q.png


sdkmanjenv 有什么区别?
@Exploring jenv 也是一个不错的选择,sdkman 还包括 kotlin、gradle、maven、ant、asciidotorJ 和许多其他开发者需要的工具
N
Nícolas Schirmer

我知道这个问题已经有很多答案了,但我只想分享我的解决方案,只使用 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 N N 是您想要的 Java 版本并且已经安装

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

几点考虑:

它只会在您使用 set-jdk 命令的终端会话中保留 Java 版本

它不会将 Java 版本设置为全局

当您想将 JAVA_HOME 添加到另一个脚本/应用程序中时,您可以设置 /Library/Java/JavaVirtualMachines/temurin-.jdk/Contents/Home (更改所需的 Java 版本。就像这个 JD-GUI 示例)

享受


这很好!你真的需要:export PATH=$PATH:$JAVA_HOME/bin; ?
e
elad.chen

这是 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

M
Matthias Bohlen

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

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

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


S
Sanchi Girotra

我按照以下链接中的步骤进行操作 - 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

P
Powers

通过 Homebrew 安装 Java 的新命令:

brew cask install 采用openjdk/openjdk/adoptopenjdk8

brew cask install 采用openjdk/openjdk/adoptopenjdk11

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

安装 Java

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

切换 Java 版本*

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

最佳解决方案

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 版本有很多很棒的工具,所以我强烈建议不要手动操作。


T
Thiago

这是一个很棒的教程 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 管理版本