Mac环境下JDK版本切换的详细指南

 更新时间:2025年07月01日 10:48:07   作者:@程序员小袁  
这篇文章主要介绍了在macOS上管理多JDK版本的方法:通过java_home工具查询路径、临时切换版本、永久配置环境变量,以及使用SDKMAN等工具实现更便捷的版本管理,需要的朋友可以参考下

概要

在 macOS 上安装了多个 JDK 后,可以通过系统自带的 /usr/libexec/java_home 工具来查询并切换不同版本的 Java。只需在终端中执行 /usr/libexec/java_home -V 列出所有已安装的 JDK,然后将你想使用的版本路径赋值给环境变量 JAVA_HOME,并将其添加到 PATH。最后,将这些设置写入你的 shell 启动文件(如 ~/.zshrc~/.bash_profile),即可在每次新开终端时自动生效。

一、查询已安装的 JDK 版本

打开 终端,输入:

/usr/libexec/java_home -V

该命令会输出所有已安装的 Java 虚拟机列表及其安装路径,例如:

Matching Java Virtual Machines (3):
    17.0.2 (x86_64) "Oracle Corporation" - "Java SE 17.0.2" /Library/Java/JavaVirtualMachines/jdk-17.0.2.jdk/Contents/Home  
    1.8.0_202 (x86_64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home  

上面是一个示例,像我的电脑上装的jdk就有点乱了

在这里插入图片描述

二、临时切换 JDK 版本

如果仅想在当前终端会话中切换版本,可直接运行:

export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)  
export PATH="$JAVA_HOME/bin:$PATH"
  • -v 1.8 可替换为你需要的版本号(如 -v 17-v 11.0.2 等)([Stack Overflow][2])
  • 切换后,执行 java -version 即可验证当前使用的 Java 版本

三、永久切换 JDK 版本

为了在每次打开终端时都自动使用同一版本,需要将上述环境变量配置写入 shell 启动文件。

1. 确定使用的 Shell

  • macOS 默认从 macOS Catalina 起采用 Zsh,启动文件为 ~/.zshrc
  • 如果你使用的是 Bash,则应编辑 ~/.bash_profile~/.bashrc

2. 编辑启动文件

以 Zsh 为例,打开或创建 ~/.zshrc

vim ~/.zshrc

或者

nano ~/.zshrc

在文件末尾添加:

# 指向 Java 17(示例)像我的电脑上jdk装的有点乱了,可以指定特定的版本比如17.0.15
export JAVA_HOME=$(/usr/libexec/java_home -v 17.0.15)  
export PATH="$JAVA_HOME/bin:$PATH"

保存并退出(Ctrl+XYEnter/获取:wq保存(vim的操作))

3. 使配置生效

source ~/.zshrc
java -version

在这里插入图片描述

此时终端应显示你指定的 Java 版本信息。

四、使用别名或脚本快速切换(可选)

如果经常在不同项目间切换 JDK,可以在启动文件中定义别名或函数,例如:

# ~/.zshrc 中
alias java8='export JAVA_HOME=$(/usr/libexec/java_home -v 1.8); export PATH="$JAVA_HOME/bin:$PATH"; java -version'
alias java17='export JAVA_HOME=$(/usr/libexec/java_home -v 17); export PATH="$JAVA_HOME/bin:$PATH"; java -version'

这样在终端中仅需执行 java8java17 即可快速切换版本。

五、可以尝试:使用 SDKMAN!

sdkman能让你在 Unix 系统上轻松管理多个软件开发工具包,像 apt、pip、RVM 和 rbenv一样工具
也可以理解为node的版本管理的工具nvm一样的工具软件
SDKMAN! 是一个管理多种 SDK(包括 Java)版本的工具。安装后可用一条命令列出并切换 JDK:

sdk list java
sdk use java 17.0.2-tem

这种方式在管理众多 Java 发行版(Oracle、Temurin、Amazon Corretto 等)时尤为方便。

到此这篇关于Mac环境下JDK版本切换的详细指南的文章就介绍到这了,更多相关Mac环境JDK版本切换内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • IDEA配置java开发环境(maven、gradle、tomcat)

    IDEA配置java开发环境(maven、gradle、tomcat)

    这篇文章主要介绍了IDEA配置java开发环境(maven、gradle、tomcat),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • SpringBoot框架集成ElasticSearch实现过程示例详解

    SpringBoot框架集成ElasticSearch实现过程示例详解

    这篇文章主要为大家介绍了SpringBoot如何集成ElasticSearch的实现过程示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-11-11
  • Java程序流程控制:判断结构、选择结构、循环结构原理与用法实例分析

    Java程序流程控制:判断结构、选择结构、循环结构原理与用法实例分析

    这篇文章主要介绍了Java程序流程控制:判断结构、选择结构、循环结构原理与用法,结合实例形式分析了Java流程控制中判断结构、选择结构、循环结构相关原理、用法及操作注意事项,需要的朋友可以参考下
    2020-04-04
  • Java ScheduledExecutorService的具体使用

    Java ScheduledExecutorService的具体使用

    ScheduledExecutorService有线程池的特性,也可以实现任务循环执行,本文主要介绍了Java ScheduledExecutorService的具体使用,具有一定的参考价值,感兴趣的可以了解一下
    2023-05-05
  • 使用mybatis切片实现数据权限控制的操作流程

    使用mybatis切片实现数据权限控制的操作流程

    数据权限控制需要对查询出的数据进行筛选,对业务入侵最少的方式就是利用mybatis或者数据库连接池的切片对已有业务的sql进行修改,本文给大家介绍了使用mybatis切片实现数据权限控制的操作流程,需要的朋友可以参考下
    2024-07-07
  • Spring Cloud Ribbon的踩坑记录与原理详析

    Spring Cloud Ribbon的踩坑记录与原理详析

    这篇文章主要给大家介绍了关于Spring Cloud Ribbon踩坑记录与原理的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-10-10
  • Java基于servlet监听器实现在线人数监控功能的方法

    Java基于servlet监听器实现在线人数监控功能的方法

    这篇文章主要介绍了Java基于servlet监听器实现在线人数监控功能的方法,结合实例形式分析了ServletContextListener监听功能的相关使用步骤与操作技巧,需要的朋友可以参考下
    2018-01-01
  • Java中List.contains(Object object)方法使用

    Java中List.contains(Object object)方法使用

    本文主要介绍了Java中List.contains(Object object)方法,使用List.contains(Object object)方法判断ArrayList是否包含一个元素对象,感兴趣的可以了解一下
    2022-04-04
  • SpringBoot整合MybatisPlusGernerator实现逆向工程

    SpringBoot整合MybatisPlusGernerator实现逆向工程

    在我们写项目的时候,我们时常会因为需要创建很多的项目结构而头疼,本文主要介绍了SpringBoot整合MybatisPlusGernerator实现逆向工程,具有一定的参考价值,感兴趣的可以了解一下
    2024-05-05
  • MyBatis中使用foreach循环的坑及解决

    MyBatis中使用foreach循环的坑及解决

    这篇文章主要介绍了MyBatis中使用foreach循环的坑及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01

最新评论