如何查看并切换 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 可能用的是另一套)。更可靠的方式是查 javajavac 的来源:

  • 运行 which javawhich 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:$PATH
    再验证 java -versionjavac -version 是否一致
  • Shell 配置文件切换(登录即生效):把 export JAVA_HOME=... 写进 ~/.zshrc(macOS Catalina+)或 ~/.bash_profile,但注意:改完要 source ~/.zshrc,且新终端才生效;多个 JDK 时建议写成函数封装,避免每次手动改
  • 使用 jdk-switcherSDKMAN!:SDKMAN! 更成熟,支持一键安装、列表、切换:
    sdk list java
    sdk use java 17.0.2-tem
    sdk default java 17.0.2-tem
    注意:它会接管 JAVA_HOMEPATH,和手动配置冲突,别混用

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.xmlmaven-compiler-pluginsourcetarget,它只控制字节码级别,不决定编译器本身用哪个 JDK;真正起作用的是 MAVEN_OPTSmaven-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 11jdk 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列操作与查询技巧