Mac安装多版本jdk(jenv)

jenv介绍

jenv 是一个 Java 版本管理工具,类似于 pyenv 管理 Python、nvm 管理 Node.js。

核心功能:

  1. 同时管理多个 JDK:你可以在一台机器上安装 JDK 8、11、17 等多个版本。
  2. 灵活切换版本:
    • 全局默认版本(整个系统终端都用这个)
    • 当前 shell 临时版本
    • 某个项目目录专属版本
  3. 无需修改系统 JAVA_HOME:通过 shims 机制,让 javajavac 命令自动指向你指定的版本。
  4. 兼容 macOS/Linux,轻量、开源。

1、安装jenv

复制代码
​​​​​​​brew install jenv

2、配置 jenv

~/.zshrc 加入:

objectivec 复制代码
export PATH="$HOME/.jenv/bin:$PATH"
eval "$(jenv init -)"

# 这里需注意,要移除原有的 jdk环境变量配置

生效:

复制代码
source ~/.zshrc

# 这里会输出 env has been updated, process to refresh plugin links
# 只是告诉你 jenv 检测到自己有更新,需要刷新插件链接,这个是正常信息,不影响使用。

检查是否安装成功

objectivec 复制代码
jenv version

# 会输出类似  system (set by /Users/{User}/.jenv/version)
# 安装成功, jenv 当前正在使用系统自带的 JDK(macOS 自带或者你之前默认安装的那个)

3、安装不同版本的JDK

直接通过Oracle官网下载.dmg 安装即可

  • 如果是 arm64Apple Silicon 芯片 (M1/M2 等) → 选择 aarch64 版本
  • 如果是 x86_64Intel 芯片 → 选择 x64 版本

4、获取安装路径

jdk的默认安装路径为

objectivec 复制代码
/Library/Java/JavaVirtualMachines/{version}/Contents/Home

也可通过以下安装命令查看

objectivec 复制代码
/usr/libexec/java_home -V

#会输出

17.0.19 (arm64) "Oracle Corporation" - "Java SE 17.0.19" /Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home
1.8.0_411 (arm64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home

5、把 JDK 添加到 jenv

objectivec 复制代码
jenv add /Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home
jenv add /Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home

检查是否添加成功

objectivec 复制代码
jenv versions

# 会输出类似

* system (set by /Users/{User}/.jenv/version)                                                                                                                                                                  
  1.8                                                                                                                                                                                                                 
  1.8.0.411                                                                                                                                                                                                           
  17                                                                                                                                                                                                                  
  17.0                                                                                                                                                                                                                
  17.0.19                                                                                                                                                                                                             
  oracle64-1.8.0.411                                                                                                                                                                                                  
  oracle64-17.0.19      

# 版本号会是多个,实际只安装了1.8.0.411和17.0.19 ,jenv会根据JDK内部的release文件和版本号,自动生成一些别名方便匹配命令

6、刷新 jenv shims 并重启 shell

objectivec 复制代码
jenv rehash
exec $SHELL

# 如果不执行这两步可能会导致后续配置默认jdk版本不生效,每次add新的jdk版本都要执行

7、配置jdk版本

objectivec 复制代码
# 1、配置全局jdk版本
jenv global 1.8.0.411

# 2、临时切换(当前终端)
jenv shell 1.8.0_411

# 3、项目目录切换 JDK
cd {project_path}
jenv local 1.8.0_411

检查是否成功

objectivec 复制代码
java -version

# 输出类似表示全局jdk版本配置成功
java version "1.8.0_411"
Java(TM) SE Runtime Environment (build 1.8.0_411-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.411-b09, mixed mode)

写在最后

objectivec 复制代码
# jenv 命令

1、 基本命令
    jenv version	查看当前使用的 JDK 版本	jenv version 输出 17.0.19 (set by ~/.jenv/version)
    jenv versions	列出已注册的所有 JDK 版本	jenv versions 输出 system, 1.8.0_411, 17.0.19
    jenv doctor	    检查 jenv 配置问题	    jenv doctor 会提示 PATH 或 shims 是否正确

2、添加 / 删除 JDK
    jenv add <JDK_PATH>	    添加 JDK 到 jenv 管理	   jenv add /Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home
    jenv remove <version>	从 jenv 移除某个版本	   jenv remove 1.8.0_411

3、切换版本
    jenv global <version>	设置全局默认 JDK	                            jenv global 17.0.19
    jenv local <version>	为当前目录设置 JDK(会生成 .java-version 文件)	jenv local 1.8.0_411
    jenv shell <version>	临时切换当前终端 JDK	                        jenv shell 17
    | 优先级:shell > local > global

4、工具和管理命令
    jenv rehash	                    刷新 shims,添加新 JDK 或安装新工具后必须执行	jenv rehash
    jenv enable-plugin <plugin>	    启用插件,比如 maven、gradle 	            jenv enable-plugin maven
    jenv disable-plugin <plugin>	禁用插件	                                jenv disable-plugin maven
    jenv doctor	                    检查 jenv 配置健康状态	                    jenv doctor
相关推荐
计算机安禾5 小时前
【c++面向对象编程】第32篇:移动语义与右值引用:现代C++性能优化核心
java·c++·性能优化
qq_401700415 小时前
Qt 自定义无边框窗口:标题栏、拖拽移动与缩放
开发语言·qt
fish_xk5 小时前
c++11的初见
开发语言·c++·算法
Amctwd5 小时前
【JavaScript】JS 异步 Promise 解析
开发语言·前端·javascript
JAVA面经实录9175 小时前
JVM高频面试总结(背诵完整版)
java·开发语言·jvm
ChoSeitaku5 小时前
11.异常_throws_try...catch_BigInteger_BigDecimal_Date_Calendar_LocalDate_Integer
java
胡志辉的博客5 小时前
完全开源、本地 SQLite 管理一切:我写了一个桌面邮件客户端 OneMail
java·sqlite·开源
沪漂阿龙5 小时前
Java JVM 面试题详解:JVM运行原理、内存模型、堆栈方法区、GC垃圾回收、JIT编译、类加载机制与线上调优全攻略
java·开发语言·jvm
小碗羊肉5 小时前
Maven高级
java·开发语言·maven