讲师中心 微信公众号
AI工具推荐 视频效率加速

Java多版本JDK共存环境如何正确搭建

冬婷君_2491

冬婷君_2491

发布时间:2026-01-08 15:06:09

|

642人浏览过

|

来源于php中文网

原创

确认JDK多版本共存需验证java -version与which java是否一致,排查PATH残留旧路径;macOS用/usr/libexec/java_home -V查看并切换,Linux用update-alternatives注册全工具链,IDE和构建工具须单独配置对应JDK。

java多版本jdk共存环境如何正确搭建

确认系统是否已安装多个JDK版本

很多开发者以为装了几个 jdk-11、jdk-17、jdk-21 就算共存成功,其实只是“物理存在”,没被系统识别或切换使用。关键看 java -version 和 which java 输出是否与预期一致。常见错误是:PATH 里残留旧 JDK 的 bin 路径,导致无论怎么改 JAVA_HOME 都不生效。

实操建议:

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

Linux installer
Linux installer

先解析安全源,运行本地CLI安装、启动、卸载Linux桌面应用。用户请求时使用。

下载
  • 运行 ls /Library/Java/JavaVirtualMachines/(macOS)或 dir "C:\Program Files\Java\"(Windows)确认实际安装路径
  • 逐个执行 /path/to/jdk-17/bin/java -version 验证各版本能否独立运行
  • 用 /usr/libexec/java_home -V(macOS)或 update-alternatives --list java(Ubuntu)查看系统级 JDK 注册列表

macOS 下用 java_home 切换默认 JDK

macOS 自带的 /usr/libexec/java_home 是最轻量、最可靠的切换方式,它不依赖 shell 配置文件重载,也不修改全局 PATH,只动态生成路径。很多人手动改 ~/.zshrc 中的 JAVA_HOME,却忘了同步更新 PATH 里的 $JAVA_HOME/bin,结果 java 命令仍调用旧版本。

实操建议:

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

  • 查可用版本:/usr/libexec/java_home -V,注意输出中每行开头的版本号和路径
  • 临时切换(当前终端有效):export JAVA_HOME=$(/usr/libexec/java_home -v 17)
  • 永久切换(推荐按项目设置):在项目根目录下加 .env 文件,用 direnv 加载;或在 IDE 运行配置中单独指定 JAVA_HOME
  • 避免写死路径,比如不要用 export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home,它易过期且不可移植

Linux(Ubuntu/Debian)用 update-alternatives 管理多 JDK

Linux 发行版通常不自带 java_home,但 update-alternatives 是标准方案。问题在于:很多人只执行 sudo update-alternatives --install 添加选项,却漏掉 --config java 手动选择,或者没同时注册 javac、jar 等关联命令,导致编译时用的是 JDK 17,打包时却调了 JDK 11 的 jar。

实操建议:

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

  • 为每个 JDK 安装项注册全部工具链:
    sudo update-alternatives --install /usr/bin/java java /opt/jdk-17/bin/java 170 \
      --slave /usr/bin/javac javac /opt/jdk-17/bin/javac \
      --slave /usr/bin/jar jar /opt/jdk-17/bin/jar
  • 切换前先确认所有关联命令已注册:update-alternatives --list java 和 update-alternatives --list javac 应返回相同优先级列表
  • 切换后验证:java -version、javac -version、readlink -f $(which java) 三者必须指向同一 JDK 根目录

IDE 和构建工具如何避开全局 JDK 冲突

即使终端里 java -version 显示正确,IntelliJ、VS Code 或 Maven 仍可能用错 JDK —— 因为它们往往忽略 shell 的 JAVA_HOME,而读取自身配置或 pom.xml 中的 maven-compiler-plugin 设置。典型现象是:命令行编译成功,IDE 报 “Unsupported class file major version 65”(即用了 JDK 21 编译,但 IDE 默认用了 JDK 11 运行)。

实操建议:

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

  • IntelliJ:File → Project Structure → Project Settings → Project → SDK,选对应 JDK;再进 Modules → Sources → Language level,确保与 SDK 匹配
  • Maven:在 pom.xml 中显式声明编译目标:
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.11.0</version>
      <configuration>
        <source>17</source>
        <target>17</target>
      </configuration>
    </plugin>
  • Gradle:在 gradle.properties 中设 org.gradle.java.home=/path/to/jdk-17,比依赖 JAVA_HOME 更可靠
环境真正稳定下来,不在于装了多少个 JDK,而在于每次执行 java、javac、IDE 启动、Maven 构建时,背后调用的二进制文件是否来自你明确指定的那个版本。最容易被忽略的是:构建工具和 IDE 的 JDK 设置彼此独立,且常常默认值滞后于系统最新安装版本。

热门AI工具

更多
AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

LibLibAI
LibLibAI Hot

一款AI视频创作工具,主要用于国内领先的AI创意平台,以海量模型、低门槛操作与“创作-分享-商业化”生态,让小白与专业创作者都能高效实现图文乃至视频创意表达,适合需要提升相关任务效率的用户。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

更多
Java Maven专题
Java Maven专题

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

3300

2025.09.15

Java Maven/Gradle 构建与依赖管理合集
Java Maven/Gradle 构建与依赖管理合集

系统讲解 Java 项目构建工具的使用与进阶配置,涵盖 Maven 的 POM 文件结构、生命周期(clean/compile/package/install/deploy)与插件机制、依赖范围(compile/provided/test/runtime)与传递依赖管理、多模块聚合与继承、私有 Nexus 仓库发布,以及 Gradle 的 Groovy / Kotlin DSL 语法、Task 自定义与增量构建、依赖版本目录(Versi

349

2026.05.09

pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

4244

2024.04.01

xml怎么变成word
xml怎么变成word

步骤:1. 导入 xml 文件;2. 选择 xml 结构;3. 映射 xml 元素到 word 元素;4. 生成 word 文档。提示:确保 xml 文件结构良好,并预览 word 文档以验证转换是否成功。想了解更多xml的相关内容,可以阅读本专题下面的文章。

5457

2024.08.01

xml是什么格式的文件
xml是什么格式的文件

xml是一种纯文本格式的文件。xml指的是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。想了解更多相关的内容,可阅读本专题下面的相关文章。

2362

2024.11.28

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

3516

2024.01.03

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

286

2025.12.06

windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

3119

2023.07.26

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

80

2026.09.30

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn