我想在Mac OSX上安装OpenJDK Java,并让它与其他JDK一起工作,因为它是一个更新的版本。目前,我下载了tar.gz并将其放在我的路径中,但这很难维护。

我发现唯一一个能自动做更多事情的安装是通过Homebrew桶进行安装。它看起来也只有当前版本:

brew cask info java

显示:

java: 13,33:5b8a42f3905b406298b72d750b6919f6 https://openjdk.java.net/

所以我可以从那里安装,然后呢?我是否只能使用新版本?


当前回答

您可以以任何您想要的方式安装JDK版本。

家酿 SDK的男人 手动

然后,我建议使用JENV在不同版本之间切换,并在全局或本地使用所需的JDK。

你可以在这里找到更多关于如何安装和使用JENV的细节-> https://blog.adamgamboa.dev/2021/06/17/using-jenv-to-switch-jkd-versions/

其他回答

无需第三方工具手动切换系统默认版本:

正如这个旧的答案中所详细描述的,在macOS上/usr/bin/ Java是一个包装工具,它将使用JAVA_HOME指向的Java版本,或者如果没有设置该变量,将在/Library/Java/JavaVirtualMachines/下查找Java安装,并将使用最高版本的Java版本。它通过查看Contents/Info来确定版本。在每个包下面写上。

有了这些知识,你可以:

通过重命名Info来控制系统将使用哪个版本。在您不想作为默认值使用的版本中使用plist(实际的Java运行时本身不使用该文件)。 通过设置$JAVA_HOME来控制特定任务使用哪个版本

我刚刚用OpenJDK和Mojave验证了这一点。

在一个全新的系统上,没有安装Java版本:

$ java -version
No Java runtime present, requesting install.

取消这个,在https://jdk.java.net上下载OpenJDK 11 & 12ea; 安装OpenJDK11:

$ cd /Library/Java/JavaVirtualMachines/
$ sudo tar xzf ~/Downloads/openjdk-11.0.1_osx-x64_bin.tar.gz

系统java现在是11:

$ java -version
openjdk version "11.0.1" 2018-10-16
[...]

安装OpenJDK12(目前是早期访问):

$ sudo tar xzf ~/Downloads/openjdk-12-ea+17_osx-x64_bin.tar.gz 

系统java现在是12:

$ java -version
openjdk version "12-ea" 2019-03-19
[...]

现在让我们从系统java包装器中“隐藏”OpenJDK 12:

$ cd jdk-12.jdk/Contents/
$ sudo mv Info.plist Info.plist.disabled

系统java回到11:

$ java -version
openjdk version "11.0.1" 2018-10-16
[...]

您仍然可以通过手动设置JAVA_HOME准时使用版本12:

$ export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-12.jdk/Contents/Home
$ java -version
openjdk version "12-ea" 2019-03-19
[...]

您可以使用asdf在多个java版本之间进行安装和切换。它也有其他语言的插件。您可以使用Homebrew安装asdf

brew install asdf

配置asdf时,需要安装java plugin

asdf plugin-add java

选择要安装的版本

asdf list-all java

例如,安装和配置adoptopenjdk8

asdf install java adoptopenjdk-8.0.272+10
asdf global java adoptopenjdk-8.0.272+10

最后,如果需要,为shell配置JAVA_HOME。只需添加到shell初始化脚本,例如~/。zsh时的ZSHRC:

. ~/.asdf/plugins/java/set-java-home.zsh

我是这么做的。

步骤1:安装Java 11

你可以从这里下载Java 11 dmg for mac: https://www.oracle.com/technetwork/java/javase/downloads/jdk11-downloads-5066655.html

步骤2:安装Java 11后。确认所有版本的安装。在终端中输入以下命令。

/usr/libexec/java_home -V

步骤3:编辑.bash_profile

sudo nano ~/.bash_profile

步骤4:添加11.0.1作为默认值。(将以下行添加到bash_profile文件中)。

export JAVA_HOME=$(/usr/libexec/java_home -v 11.0.1)

切换到任何版本

export JAVA_HOME=$(/usr/libexec/java_home -v X.X.X)

现在按CTRL+X退出bash。按“Y”保存更改。

步骤5:重新加载bash_profile

source ~/.bash_profile

步骤6:确认当前的Java版本

java -version

如果您的机器上安装了多个版本,请在bash配置文件中添加以下内容:

export JAVA_HOME_7=$(/usr/libexec/java_home -v1.7) export JAVA_HOME_8=$(/usr/libexec/java_home -v1.8) export JAVA_HOME_9=$(/usr/libexec/java_home -v9)

并添加以下别名:

别名java7=“出口JAVA_HOME=$ java_home_7” 别名java8=“出口JAVA_HOME=$ java_home_8” 别名java9=“出口JAVA_HOME=$ java_home_9”

并且可以使用别名切换到所需的版本:

在终端:

~ >> java7 出口JAVA_HOME = $ JAVA_7_HOME

另一种选择是使用SDKMAN!参见https://wimdeblauwe.wordpress.com/2018/09/26/switching-between-jdk-8-and-11-using-sdkman/

首先安装SDKMAN: https://sdkman.io/install然后…

安装Oracle JDK 8使用 安装OpenJDK 11

开关:

使用java 8.0.181-oracle切换到带有sdk的JDK 8 使用java 11.0.0-open切换到带有sdk的JDK 11

设置默认值:

默认JDK 8, sdk默认java 8.0.181-oracle 默认为JDK 11, sdk默认为java 11.0.0-open