当前位置: 首页 > ai >正文

Mac 环境下 JDK 版本切换全指南

概要

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


一、查询已安装的 JDK 版本

  1. 打开 终端,输入:

    /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 等)时尤为方便。


http://www.xdnf.cn/news/6376.html

相关文章:

  • HDMI信号采集器连OBS没有声音的问题
  • 导入了lombok但是却不起作用,显示实际参数列表和形式参数列表的长度不同或者无法将类的构造器给到给定的类型
  • C# 实现雪花算法(Snowflake Algorithm)详解与应用
  • Redis(2):Redis + Lua为什么可以实现原子性
  • Linux系统——进程结束时退出的分析与总结(关于wait与waitpid函数)
  • 红黑树解析
  • CyberDuckai入门笔记
  • 使用 GitDiagram 快速将 GitHub 仓库转换为交互式图表
  • 信奥赛CSP-J复赛集训(图和树专题)(9):P2171 Hz吐泡泡
  • 【ALINX 实战笔记】FPGA 大神 Adam Taylor 使用 ChipScope 调试 AMD Versal 设计
  • 电力电容器故障利用沃伦森(WARENSEN)工业设备智能运维系统解决方案
  • SaaS基于云计算、大数据的Java云HIS平台信息化系统源码
  • 【Linux】Linux安装mysql
  • 2035.5.15 并查集
  • C#中BackgroundWorker的概念与用法详解
  • uniapp中vue3和pinia安装依赖npm install失败
  • calico排错思路
  • WebSocket:实时通信(如聊天应用)从零到一的深度解析
  • 养生:打造健康生活的四大支柱
  • 自用Vscode 配置c++ debug环境
  • 国产化Word处理控件Spire.Doc教程:通过C# 删除 Word 文档中的超链接
  • Window下Jmeter多机压测方法
  • linux使用普通用户,禁止root用户登录实操
  • 大模型智能体与 React Flow:构建智能化可视化交互系统的技术范式
  • Vue3+ElementPlus 开箱即用后台管理系统,支持白天黑夜主题切换,通用管理组件,
  • 海外短剧H5/App开源系统搭建指南:多语言+国际支付+极速部署
  • 【spring】spring源码系列之十:spring事务管理(下)
  • PostgreSQL malformed array literal异常
  • PostgreSQL pgrowlocks 扩展详解
  • 1267, “Illegal mix of collations (latin1_swedish_ci,IMPLICIT