0

0

怎么在Mac上安装多个版本的JDK_使用jenv切换Java版本指南

P粉602998670

P粉602998670

发布时间:2026-03-14 12:58:03

|

376人浏览过

|

来源于php中文网

原创

用 jenv 管理 Mac 多 JDK 版本最稳定,因其通过 shell hook 统一代理 java 命令,支持全局(jenv global)和项目级(jenv local)切换,并能被 IntelliJ、Gradle 等工具正确识别,避免 JAVA_HOME 手动配置错误。

怎么在mac上安装多个版本的jdk_使用jenv切换java版本指南

Mac 上装多个 JDK 版本不难,但直接改 JAVA_HOME 或手动改 PATH 很容易出错、切换失效、IDE 不识别——用 jenv 是目前最稳的方案。

为什么不用 brew install openjdk@17 就完事?

Homebrew 安装的 OpenJDK 默认装在 /opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk 这类路径,不是标准 JDK 根目录;java -version 能跑,但 IntelliJ、Gradle、Maven 常常找不到 javac 或读不到 tools.jar(虽然 JDK 9+ 已移除)。更关键的是:多个版本共存时,系统无法自动区分哪个是“当前项目该用的”。

实操建议:

  • brew install openjdk@11brew install openjdk@17 等命令装好各版本,但别指望它们能直接被 java 命令调用
  • 装完后执行 brew info openjdk@17,抄下 libexec 后面那段完整路径,这是后续 jenv 添加版本要用的
  • Oracle JDK 或 Temurin 下载的 .dmg 安装包,会把 JDK 放进 /Library/Java/JavaVirtualMachines/,这个路径 jenv 能直接识别,不用额外处理

安装和初始化 jenv 的三步关键操作

jenv 本身不装 JDK,只做版本注册与环境代理。它通过 shell hook 注入 javajavac 等命令,让所有调用都走它控制的符号链接。

立即学习Java免费学习笔记(深入)”;

实操建议:

  • 先装 jenvbrew install jenv(注意不是 brew install jenv/jenv/jenv,旧文档里有误导)
  • ~/.zshrc 末尾加两行:export PATH="$HOME/.jenv/bin:$PATH"eval "$(/opt/homebrew/bin/jenv init -)"(路径按你 brew --prefix 输出的实际值调整)
  • 重启终端或执行 source ~/.zshrc,然后运行 jenv versions —— 如果报错 command not found,说明 init 没生效,检查是否漏了 eval 行或 shell 类型不匹配(M1/M2 用 zsh,不是 bash)

怎么把已装的 JDK 加进 jenv 并正确切换?

jenv 不会自动扫描系统 JDK,必须手动添加。添加时路径必须指向 JDK 目录本身,不是 bin 子目录,也不是 .jdk 包裹路径(除非是 macOS 原生格式)。

听脑AI
听脑AI

听脑AI语音,一款专注于音视频内容的工作学习助手,为用户提供便捷的音视频内容记录、整理与分析功能。

下载

常见错误现象:

  • jenv add /opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk → 失败,因为 Homebrew 的 .jdk 是符号链接包裹体,jenv 解析失败
  • jenv add /opt/homebrew/opt/openjdk@17/libexec → 失败,这不是 JDK 根目录

实操建议:

  • 对 Homebrew JDK:用 ls -la /opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk 查看真实路径(比如指向 ../../../Cellar/openjdk@17/17.0.2/libexec/openjdk.jdk),然后用那个绝对路径加 jenv
  • 对 Oracle/Temurin:直接加 /Library/Java/JavaVirtualMachines/jdk-17.0.2.jdk 这类路径即可
  • 加完用 jenv versions 确认列表里出现 17.011.0 等标识,再用 jenv global 17.0 设全局,默认就生效了
  • 项目级切换用 jenv local 11.0,会在当前目录生成 .java-version 文件,比 export JAVA_HOME=... 可靠得多

IntelliJ / VS Code / Gradle 为啥还是用错 Java 版本?

IDE 和构建工具启动时可能绕过 shell 环境,读取的是自己的启动配置或系统默认 JAVA_HOME,和终端里 jenv 设置的无关。

实操建议:

  • IntelliJ:Preference → Build → Gradle → JVM,选 “Project SDK” 或明确指定路径,不要选 “Bundled”
  • VS Code:检查 java.home 设置,必须指向 jenv 当前激活的 JDK 路径,可用 jenv which java 查到真实路径(例如 /Users/xxx/.jenv/versions/17.0/bin/java
  • Gradle:如果 gradle -v 显示的 Java 版本不对,说明它没走 shell 的 java 命令,而是用了自己硬编码的 JAVA_HOME —— 在 gradle.properties 里删掉 org.gradle.java.home 配置,或确保它和 jenv which java 的父目录一致

最容易被忽略的点:每次用 jenv globaljenv local 切换后,IDE 必须重启终端式控制台(比如 Terminal 插件),否则里面跑的 gradlemvn 还是旧环境。不是所有工具都会动态 reload jenv 状态。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Java Maven专题
Java Maven专题

本专题聚焦 Java 主流构建工具 Maven 的学习与应用,系统讲解项目结构、依赖管理、插件使用、生命周期与多模块项目配置。通过企业管理系统、Web 应用与微服务项目实战,帮助学员全面掌握 Maven 在 Java 项目构建与团队协作中的核心技能。

0

2025.09.15

macOS怎么切换用户账户
macOS怎么切换用户账户

在 macOS 系统中,可通过多种方式切换用户账户。如点击苹果图标选择 “系统偏好设置”,打开 “用户与群组” 进行切换;或启用快速用户切换功能,通过菜单栏或控制中心的账户名称切换;还能使用快捷键 “Control+Command+Q” 锁定屏幕后切换。

359

2025.05.09

oracle清空表数据
oracle清空表数据

当表中的数据不需要时,则应该删除该数据并释放所占用的空间。本专题为大家提供oracle清空表数据的相关文章,帮助大家解决该问题。

271

2023.08.16

Oracle中declare的使用
Oracle中declare的使用

Oracle DECLARE语句是PL/SQL编程语言中用于声明变量、常量、游标或异常的关键字。它的主要作用是在程序中定义这些对象,以便在后续的代码中使用。DECLARE语句的语法简单明了,可以根据需要声明多个对象。通过使用这些声明的对象,可以进行各种操作,如计算、查询数据库、处理异常等 。

221

2023.09.15

oracle怎么分页
oracle怎么分页

实现分页的步骤:1、使用ROWNUM进行分页查询;2、在执行查询之前进行设置分页参数;3、使用"COUNT(*)"函数来获取总行数,并使用"CEIL"函数来向上取整计算总页数;4、在外部查询中使用"WHERE"子句来筛选出特定的行号范围,以实现分页查询。想了解更多oracle怎么分页的文章,可以来阅读本专题先的文章。

246

2023.09.18

Oracle查看表操作历史记录
Oracle查看表操作历史记录

查看操作历史记录的方法:1、使用Oracle内置的审计功能,可以记录数据库中发生的各种操作,包括登录、DDL语句、DML语句等;2、使用Oracle日志文件,其中包含了数据库中发生的各种操作,可以通过查看日志文件来获取操作历史记录;3、使用Oracle的Flashback功能,可以查看数据库在某个时间点的操作历史记录;4、使用第三方工具等。本专题还提供其他查看表操作的文章,大家可以免费阅读。

464

2023.09.19

Oracle中RAC的用法
Oracle中RAC的用法

Oracle中RAC的用法:1、通过在多个服务器上运行数据库实例来提供高可用性;2、允许在需要时增加或减少节点数量;3、通过将工作负载分布到多个节点上来实现负载均衡;4、使用共享存储来实现多个节点之间的数据共享;5、允许多个节点同时处理数据库请求,从而实现并行处理;6、提供了透明故障切换功能;7、使用了一些技术来确保数据的一致性;8、提供了管理工具来简化RAC环境的管理和维护。本专题还提供RAC相关的其他文章,大家可以免费阅读。

451

2023.09.19

oracle imp
oracle imp

imp是Oracle数据库中的一个命令行工具,用于将导出的数据和对象从一个数据库实例导入到另一个数据库实例。imp命令的一般语法为“imp username/password@connect_string file=file_name [options]”。

341

2023.09.19

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

26

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 4.4万人学习

C# 教程
C# 教程

共94课时 | 11.3万人学习

Java 教程
Java 教程

共578课时 | 81.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号