如何查看并切换 Java 版本 JDK 多版本环境管理教程【方法】
发布时间 - 2026-01-27 00:00:00 点击率:次推荐用/usr/libexec/java_home -V查macOS JDK列表,which java/javac+readlink或ls -l追溯真实路径,echo $JAVA_HOME确认环境变量;临时切换用export JAVA_HOME=...,长期配置写入~/.zshrc,多版本建议用SDKMAN!;IDE需单独设置Project SDK和Maven导入JDK,Maven/Gradle另有配置项。
查看当前 Java 版本和 JDK 安装路径
终端里直接运行 java -version 只显示 JRE 运行时版本,不一定反映你实际在用的 JDK(比如 IDE 可能用的是另一套)。更可靠的方式是查 java 和 javac 的来源:
- 运行
which java和which javac(macOS/Linux)或where java(Windows CMD)确认可执行文件位置 - 接着用
readlink -f $(which java)(Linux)或ls -l $(which java)(macOS)追溯到真实 JDK 根目录 - 检查
$JAVA_HOME环境变量:运行echo $JAVA_HOME,它应指向某个 JDK 的根目录(如/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home)
切换 JDK 版本的三种常用方式
不同场景下推荐不同方法,不是所有方式都通用:
-
临时切换(当前终端有效):直接重设
JAVA_HOME并刷新PATH,例如:export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-11.0.20.jdk/Contents/Home
再验证
export PATH=$JAVA_HOME/bin:$PATHjava -version和javac -version是否一致 -
Shell 配置文件切换(登录即生效):把
export JAVA_HOME=...写进~/.zshrc(macOS Catalina+)或~/.bash_profile,但注意:改完要source ~/.zshrc,且新终端才生效;多个 JDK 时建议写成函数封装,避免每次手动改 -
使用
jdk-switcher或SDKMAN!:SDKMAN! 更成熟,支持一键安装、列表、切换:sdk list java
注意:它会接管
sdk use java 17.0.2-tem
sdk default java 17.0.2-temJAVA_HOME和PATH,和手动配置冲突,别混用
IDE 和构建工具不随终端切换?查这三处
即使终端里 java -version 正确,IntelliJ、Eclipse 或 Maven 仍可能用错 JDK —— 它们通常不读系统 JAVA_HOME:
- IDE 设置:IntelliJ → Preferences → Build, Execution, Deployment → Build Tools → Maven → Importing → JDK for importer;同时 Project SDK 要单独设(File → Project Structure → Project)
-
Maven 编译目标:检查
pom.xml中maven-compiler-plugin的source和target,它只控制字节码级别,不决定编译器本身用哪个 JDK;真正起作用的是MAVEN_OPTS或maven-toolchains-plugin -
Gradle 项目:看
gradle.properties是否有org.gradle.java.home,或命令行传参:./gradlew build --no-daemon -Dorg.gradle.java.home=/path/to/jdk-11
Mac 上 /usr/libexec/java_home 是个关键工具
macOS 自带的 /usr/libexec/java_home 是定位 JDK 的权威方式,比硬编码路径更安

- 列出所有已注册 JDK:
/usr/libexec/java_home -V - 获取指定版本路径:
/usr/libexec/java_home -v 17(匹配最接近的 17.x) - 配合切换:可以写成函数放进
~/.zshrc:jdk() {然后用
export JAVA_HOME=$(/usr/libexec/java_home -v "$1");
export PATH=$JAVA_HOME/bin:$PATH;
}jdk 11或jdk 17快速切换
注意:这个命令只识别通过官方 pkg 安装或符合 macOS JDK 目录规范的 JDK,手动解压的 tar.gz 包需先用 sudo ln -s 注册进 /Library/Java/JavaVirtualMachines/ 才能被发现。
# linux
# java
# windows
# 编码
# 字节
# 工具
# mac
# ai
# switch
# eclipse
# macos
# 环境变量
# maven
# sdkman
# echo
# for
# 封装
# xml
# ide
# gradle
# 的是
# 是个
# 多个
# 另有
# 三种
# 只显示
# 自带
# 它会
# 先用
# 命令行
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
深入理解Android中的xmlns:tools属性
JavaScript如何实现倒计时_时间函数如何精确控制
Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧
如何在万网自助建站平台快速创建网站?
制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?
利用JavaScript实现拖拽改变元素大小
黑客如何通过漏洞一步步攻陷网站服务器?
如何在建站之星网店版论坛获取技术支持?
昵图网官方站入口 昵图网素材图库官网入口
Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解
Python函数文档自动校验_规范解析【教程】
Android滚轮选择时间控件使用详解
java ZXing生成二维码及条码实例分享
Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧
详解jQuery停止动画——stop()方法的使用
大连 网站制作,大连天途有线官网?
三星网站视频制作教程下载,三星w23网页如何全屏?
微信小程序 input输入框控件详解及实例(多种示例)
HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】
Laravel storage目录权限问题_Laravel文件写入权限设置
如何快速辨别茅台真假?关键步骤解析
Laravel Blade模板引擎语法_Laravel Blade布局继承用法
Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用
高防服务器租用指南:配置选择与快速部署攻略
jQuery validate插件功能与用法详解
Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比
HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】
SQL查询语句优化的实用方法总结
Laravel如何为API编写文档_Laravel API文档生成与维护方法
Python文件流缓冲机制_IO性能解析【教程】
手机网站制作与建设方案,手机网站如何建设?
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
Laravel项目结构怎么组织_大型Laravel应用的最佳目录结构实践
Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析
Laravel怎么在Blade中安全地输出原始HTML内容
INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】
微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】
Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】
如何快速搭建高效WAP手机网站吸引移动用户?
高端建站如何打造兼具美学与转化的品牌官网?
如何做网站制作流程,*游戏网站怎么搭建?
nodejs redis 发布订阅机制封装实现方法及实例代码
Laravel如何使用Collections进行数据处理?(实用方法示例)
如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体
Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全
香港服务器租用费用高吗?如何避免常见误区?
用v-html解决Vue.js渲染中html标签不被解析的问题
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
如何用5美元大硬盘VPS安全高效搭建个人网站?
Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧

