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

我发现的另一个可以自动完成更多操作的安装是通过brew 桶进行的安装.看起来也只有当前版本:

brew cask info java

显示:

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

所以我可以从那里安装,但那又怎么样?我只是被新版本困住了吗?

推荐答案

Note: These solutions work for various versions of Java including Java 8 through Java 17 (the LTS version). This includes alternative JDK's from OpenJDK, Oracle, IBM, Azul, Amazon Correto, Graal and more. Easily work with Java 7, Java 8, Java 9, Java 10, Java 11, Java 12, Java 13, Java 14, Java 15, Java 16, and Java 17!

对于如何进行安装以及如何管理JDK交换,您有几个选项.安装可以通过brew 、SDKMANasdfJabba或手动安装完成.可通过JEnvSDKMANasdfJabba或通过设置JAVA_HOME手动进行切换.下面将对所有这些进行描述.


TL;DR - Preferred Methods of Installation

您可以使用您喜欢的任何方法安装Java,包括SDKMAN、asdf、brew 或手动安装tar.gz文件.手动安装的优点是,JDK的位置可以放在Mac OSX的标准位置.

然而,还有一些更简单的选项,比如SDKMANasdf,它们也将为JVM安装其他重要和常见的工具.这里介绍了这两个主要选项.

使用SDKMAN安装和切换版本

SDKMAN有点不同,它可以处理安装和切换.SDKMAN还将已安装的JDK放入自己的目录树中,通常是~/.sdkman/candidates/java.SDKMAN允许设置全局默认版本,以及特定于当前shell的版本.

  1. https://sdkman.io/install安装SDKMAN

  2. 列出可用的Java版本,以确保您知道版本ID

    sdk list java
    
  3. 安装其中一个版本,例如Java 17:

    sdk install java 17-open 
    
  4. 将Java 17设为默认版本:

    sdk default java 17-open
    

    或切换到当前终端会话的17:

    sdk use java 17-open
    

当您使用list命令列出可用的安装版本时,您将看到各种各样的Java发行版:

sdk list java

并安装其他版本,如Amazon提供的JDK 11:

sdk install java 11.0.10.9.1-amzn

SDKMAN可以使用以前安装的现有版本.只需在本地安装,并给出您自己的版本标签和JDK的位置:

sdk install java my-local-13 /Library/Java/JavaVirtualMachines/jdk-13.jdk/Contents/Home

自由使用它:

sdk use java my-local-13

当您更改版本时,SDKMAN将自动为您管理PATHJAVA_HOME.值得注意的是,它将Java版本安装到~/.sdkman/candidates/java/.

更多信息可以在SDKMAN Usage Guideother SDK's中找到,它们可以安装和管理.


Installing and Switching versions with "asdf"

asdf是一个版本管理器,支持安装和管理大多数语言、框架和开发人员/devops工具.它有特定于语言的插件,包括一个for Java.

  1. 首先,安装asdfhttps://asdf-vm.com/guide/getting-started.html(请阅读此处以正确设置您的shell),或者更简单:

    brew reinstall asdf
    

    read the doc用于正确设置您的shell,但如果您使用的是带有ZSH的Homebrew中的asdf,则可以执行以下命令来完成设置:

    echo -e "\n. $(brew --prefix asdf)/libexec/asdf.sh" >> ${ZDOTDIR:-~}/.zshrc
    
  2. 然后通过https://github.com/halcyon/asdf-java安装Java插件

    asdf plugin add java
    

    read the doc用于在继续之前正确设置shell.基本上,它说要将以下内容添加到您的~/.zshrc文件中(假设您没有使用另一个shell):

    . ~/.asdf/plugins/java/set-java-home.zsh
    
  3. 现在列出Java版本:

    asdf list-all java
    
  4. 安装您最喜欢的口味和版本:

    asdf install java openjdk-17
    

    或安装最新版本:

    asdf install java latest
    

其他重要的命令还有...

  • 列出您已安装的版本:

    asdf list java
    
  • 设置全局Java版本:

    asdf global java openjdk-17
    
  • 为目录设置本地Java版本:

    asdf local java openjdk-17
    

就这么简单!asdf将在您更改版本时自动管理您的PATH和JAVA_HOME.请注意,asdf将Java版本安装到~/.asdf/installs/java.

这里有其他asdf语言和插件,来自存储库页面:https://github.com/asdf-vm/asdf-plugins


Other Methods of Installation

用brew 软件安装

在2018年10月3日之前,Homebrew Cask中提供的Java版本确实是Oracle JVM.但是,现在它已经更新到OpenJDK.请务必更新HomeBREW,然后您将看到可供安装的最新版本.

  1. install Homebrew,如果你还没有.确保它已更新:

     brew update
    
  2. 加入木桶龙头:

     brew tap homebrew/cask-versions
    

    这些容器经常更改其Java版本,可能还有其他带有附加Java版本的水龙头.

  3. 寻找可安装的版本:

     brew search java  
    

    或者对于Eclipse Temurin版本:

     brew search temurin     
    
  4. 判断将要安装的版本的详细信息:

     brew info java
    

    或者对于Temurin版本:

     brew info temurin
    
  5. 安装JDK的特定版本,例如java11temurin8temurin11,或者仅安装javatemurin,以适应最新版本的JDK.例如:

     brew install java
    
     brew install --cask temurin
    

这些设备将安装在/Library/Java/JavaVirtualMachines/,这是在MacOSX上预期的传统位置.可能需要额外的步骤才能在安装过程结束时报告JDK处于活动状态.

从OpenJDK下载页面手动安装:

如果你需要任何版本的Java,这是一个好地方.

  1. http://jdk.java.net/下载OpenJDK for Mac OSX(例如Java 17)

  2. 取消对OpenJDK tar的归档,并将生成的文件夹(即jdk-17.jdk)放入/Library/Java/JavaVirtualMachines/文件夹中,因为这是JDK安装的标准和预期位置.实际上,你也可以在任何地方安装.

  3. JAVA_HOME环境变量设置为指向您解压JDK的方向.

更多信息请参见答案specific to manual installation.有关如何管理多个手动安装的更多信息,请参见下面的"手动切换版本"部分.

其他安装选项:

OpenJDK的其他一些口味包括:

遵循instructions on their site可以安装100 Java Zulu个经过认证的OpenJDK版本.

Zulu®是OpenJDK的认证版本,完全符合Java SE标准.Zulu是100%开源的,可以免费下载.现在,Java开发人员、系统管理员和最终用户可以充分享受开源Java带来的好处,包括部署灵活性和对升级时间的控制.

Amazon Correto个OpenJDK版本有一个易于使用的Java 8、Java 11、Java 15、Java 16和Java 17安装包.它安装在Mac OSX上的标准/Library/Java/JavaVirtualMachines/目录中.

Amazon Corretto是开放Java开发工具包(OpenJDK)的一个无成本、多平台、可生产的发行版.Corretto提供长期支持,包括性能增强和安全修复.亚马逊在内部运行Corretto,提供数千种生产服务,Corretto经认证与Java SE标准兼容.使用Corretto,您可以在流行的操作系统上开发和运行Java应用程序,包括Linux、Windows和macOS.


Where is my JDK?!?!

要查找以前安装的Java JDK在默认系统位置的安装位置,请使用:

/usr/libexec/java_home -V

Matching Java Virtual Machines (10):
17 (x86_64) "Homebrew" - "OpenJDK 17" /usr/local/ceral/openjdk/17/libexec/openjdk.jdk/Contents/Home
11, x86_64: "Java SE 11" /Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home
1.8.301.09 (x86_64) "Oracle Corporation" - "Java" /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home /usr/local/ceral/openjdk/17/libexec/openjdk.jdk/Contents/Home

您还可以使用-v报告特定Java版本的位置.例如,对于Java 17:

/usr/libexec/java_home -v 17

/usr/local/ceral/openjdk/17/libexec/openjdk.jdk/Contents/Home

在使用JEnv等工具时,或者手动将本地安装添加到SDKMAN中,或者在Jabba中链接系统JDK时,知道已安装JDK的位置也很有用--并且您需要知道在哪里可以找到它们.

如果需要查找其他工具安装的JDK,请查看以下位置:

  • SDKMAN安装到~/.sdkman/candidates/java/
  • asdf安装到~/.asdf/installs/java
  • 贾巴安装到~/.jabba/jdk

Version Switching

如果你使用SDKMANasdf,你已经被覆盖,可以停止阅读!否则,下面是一些切换现有VM安装的选项.

手动切换版本

Java可执行文件是一个包装器,它将使用JAVA_HOME中配置的任何JDK,因此您可以更改它来更改正在使用的JDK.

例如,如果您安装或解压JDK 16到/Library/Java/JavaVirtualMachines/jdk-16.jdk(如果它是最高版本号),则它应该已经是缺省版本,如果不是,您只需设置:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-16.jdk/Contents/Home

现在,路径中的任何Java可执行文件都将看到这一点,并使用正确的JDK.

simple way to change JDKs是在您的~/.bashrc~/.zshrc文件中创建一个函数:

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

然后简单地通过以下方式更改JDK:

jdk 1.8
jdk 9
jdk 11
jdk 13

与JEnv切换版本

JEnv期望Java JDK已经存在于机器上,并且可以位于任何位置.通常,您会在/Library/Java/JavaVirtualMachines/中找到已安装的Java JDK.JEnv允许设置Java的全局版本,一个是针对当前shell的版本,另一个是针对每个目录的本地版本,这在某些项目需要的版本与其他项目不同时非常方便.

  1. 如果您尚未安装JEnv,请参阅站点http://www.jenv.be/上有关手动安装或使用Homebrew的说明.

  2. 向JEnv(adjust the directory if you placed this elsewhere)添加任何Java版本:

    jenv add /usr/local/ceral/openjdk/17/libexec/openjdk.jdk/Contents/Home
    
  3. 使用以下命令设置您的全局版本:

    jenv global 17
    

您还可以使用类似的方式添加使用jenv add的其他现有版本,并列出可用的版本.例如,Java 8:

jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home 
jenv versions

有关更多命令,请参阅JEnv docs.现在,您可以随时在任何Java版本(Oracle、OpenJDK或其他)之间切换,无论是针对整个系统、针对Shell,还是针对每个本地目录.

要在使用JEnv时帮助管理JAVA_HOME,您可以添加export plugin来完成这项工作.

$ jenv enable-plugin export
  You may restart your session to activate jenv export plugin echo export plugin activated

导出插件可能不会调整JAVA_HOME,如果已经设置了,那么您可能需要清除配置文件中的这个变量,以便JEnv可以管理它.

您还可以使用jenv exec <command> <parms...>来运行单个命令,并为该命令正确设置JAVA_HOMEPATH,这可能包括打开另一个shell.


使用Jabba安装和切换版本

Jabba还处理安装和切换.Jabba还将安装的JDK放入自己的目录树中,通常是~/.jabba/jdk.

  1. 按照instructions on the home page安装Jabba.

  2. 列出可用的JDK

    jabba ls-remote
    
  3. 安装Java JDK 12

    jabba install openjdk@1.12.0
    
  4. 使用它:

    jabba use openjdk@1.12.0
    

您还可以别名版本名,链接到已经安装的现有JDK,并找到一些有趣的JDK,如GraalVM、Adoption JDK、IBM JDK等.完整的usage guide个版本也可以在主页上找到.

Jabba将在您更改版本时自动为您管理PATHJAVA_HOME.

Java相关问答推荐

当耗时的代码完成时,Circular ProgressIndicator显示得太晚

使用ExecutorService时在ThreadFactory中触发自定义newThread函数

Javascript更新alert 可扩展内容样式与CSS—按钮更多/更少

Java中后期绑定的替代概念

springboot start loge change

我需要生成一个文件来整合每个特性执行的所有JSON结果

连接Quarkus中的两个异步操作

Java中的死锁及其重入锁和锁

更新GWT 2.5.1到2.11.0和sencha GXT 3.1.1到4.1时出现错误

在Spring Boot应用程序中导致";MediaTypeNotSupportdException&qot;的映像上载

解释左移在Java中的工作原理

使用用户引入的参数生成人员数组

Domino Designer 14中的保存代理添加了重影库

在执行流和相关操作时,使用Java泛型为2个方法执行相同的操作,但对象不同

如何在不作为类出现的表上执行原生查询?

对角线填充二维数组

在打开搜索结果时,如何让Eclipse打开整个文件?

在Java Spring JPA中插入包含对其他实体的引用的列

如何在Spring Security中设置一个任何人都可以打开的主页?

Spring Boot Security-每个端点都被403禁止,Spring记录一个BasicErrorController#错误(HttpServlet请求)