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

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

brew cask info java

显示:

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

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


当前回答

与Homebrew和jenv合作:

假设:Mac机器,你已经安装了自制软件。

从Oracle官方网站安装Java。可以安装多个版本的JDK。它将安装在以下路径:

 /Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/
 /Library/Java/JavaVirtualMachines/jdk1.11.0_2.jdk/
 /Library/Java/JavaVirtualMachines/jdk-14.0.2.jdk/

如果没有jenv,系统将使用最后安装的java。

如果你想使用/管理多个版本,那么你可以使用jenv:

安装和配置jenv:

$ brew install jenv
$ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.zshrc
$ echo 'eval "$(jenv init -)"' >> ~/.zshrc
$ source ~/.zshrc

将已安装的java添加到jenv:

$ jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home
$ jenv add /Library/Java/JavaVirtualMachines/14.0.2.jdk/Contents/Home

查看所有已安装的java:

$ jenv versions

上面的命令将给出已安装java的列表:

  system
  1.8
* 1.8.0.291 (set by /Users/lpatel/.jenv/version)
  14
  14.0
  14.0.2
  oracle64-1.8.0.291
  oracle64-14.0.2

配置你想要使用的java版本:

$ jenv global 1.8.0.291

其他回答

恕我直言,没有必要安装所有额外的应用程序/包。

使用命令检查可用的版本:

> /usr/libexec/java_home -V
Matching Java Virtual Machines (8):
    11, x86_64: "Java SE 11-ea" /Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home
    10.0.2, x86_64: "Java SE 10.0.2"    /Library/Java/JavaVirtualMachines/jdk-10.0.2.jdk/Contents/Home
    9.0.1, x86_64:  "Java SE 9.0.1" /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home
    1.8.0_181-zulu-8.31.0.1, x86_64:    "Zulu 8"    /Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home
    1.8.0_151, x86_64:  "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home
    1.7.0_80, x86_64:   "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home
    1.6.0_65-b14-468, x86_64:   "Java SE 6" /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
    1.6.0_65-b14-468, i386: "Java SE 6" /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

现在,如果你想在上面的列表中选择Azul JDK 8,而不是Oracle的Java SE 8,调用如下命令:

> /usr/libexec/java_home -v 1.8.0_181
/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home

要选择Oracle的Java SE 8,您将调用以下命令:

> /usr/libexec/java_home -v 1.8.0_151
/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home

正如你所看到的,提供的版本号应该是唯一的字符串集:1.8.0_181 vs 1.8.0_151

要保持特定的主要版本,请使用brew tap激活AdoptOpenJDK tap,然后使用brew cask install安装所需的版本:

$ brew tap AdoptOpenJDK/openjdk
$ brew cask install <version>

要安装带有HotSpot的AdoptOpenJDK 14,运行:

$ brew tap AdoptOpenJDK/openjdk
$ brew cask install adoptopenjdk14

这个答案扩展了Jayson的优秀答案,并对您的用例的最佳方法提供了一些更有见解的指导:

SDKMAN is the best solution for most users. It's easy to use, doesn't have any weird configuration, and makes managing multiple versions for lots of other Java ecosystem projects easy as well. Downloading Java versions via Homebrew and switching versions via jenv is a good option, but requires more work. For example, the Homebrew commands in this highly upvoted answer don't work anymore. jenv is slightly harder to setup, the plugins aren't well documented, and the README says the project is looking for a new maintainer. jenv is still a great project, solves the job, and the community should be thankful for the wonderful contribution. SDKMAN is just the better option cause it's so great. Jabba is written is a multi-platform solution that provides the same interface on Mac, Windows, and PC (it's written in Go and that's what allows it to be multiplatform). If you care about a multiplatform solution, this is a huge selling point. If you only care about running multiple versions on your Mac, then you don't need a multiplatform solution. SDKMAN's support for tens of popular SDKs is what you're missing out on if you go with Jabba.

手动管理版本可能是最糟糕的选择。如果你决定手动切换版本,你可以使用这个Bash代码,而不是Jayson的冗长代码(代码片段来自homebrew-openjdk README:

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

Jayson的回答提供了SDKMAN和jenv的基本命令。如果你想了解更多关于这些工具的背景知识,这里有更多关于SDKMAN和jenv的信息。

如果您的机器上安装了多个版本,请在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