多项目开发环境:如何使用update-alternatives管理多版本Java JDK?(Windows、Mac、Ubuntu)(多项.如何使用.版本.环境.开发...)

wufei123 发布于 2025-09-11 阅读(1)
如何使用update-alternatives管理多版本Java JDK?(Windows、Mac、Ubuntu)

? 摘要

在实际开发中,往往会遇到既要维护老项目又要跟进新特性的场景,这就需要在一台机器上同时安装并切换多个java jdk版本。本文将针对三大主流平台——windows、macos 和 ubuntu,详细介绍如何安装多个 jdk,并使用各自平台上的“替代方案”工具来管理与切换。

Windows:通过系统环境变量与批处理脚本实现版本切换macOS:利用
/usr/libexec/java_home
与 jEnv 工具Ubuntu:深入剖析
update-alternatives
原理与实战

无论您是新手还是有一定经验的开发者,都能从中获得清晰的思路与操作指南。

多项目开发环境:如何使用update-alternatives管理多版本Java JDK?(Windows、Mac、Ubuntu)

? 引言兼容性测试:老项目可能依赖 Java 8,而新项目需要 Java 17。生态差异:Spring Boot 2.x 与 3.x 对 Java 版本的要求不同。CI/CD 集成:自动化构建需要在不同 JDK 下验证构建过程。

三大平台各有生态与管理方式,因此本文将分别展开,帮助您在不同系统上搭建灵活的多版本 Java 环境。

博主:猫头虎全网搜索关键词:猫头虎作者微信号:Libin9iOak作者公众号:猫头虎技术团队更新日期:2025年07月21日? 欢迎来到猫头虎的博客 — 探索技术的无限可能!

加入我们AI共创团队 ?猫头虎AI共创社群矩阵列表: 点我进入共创社群矩阵入口点我进入新矩阵备用链接入口

加入猫头虎的共创圈,一起探索编程世界的无限可能! ? 多项目开发环境:如何使用update-alternatives管理多版本Java JDK?(Windows、Mac、Ubuntu)猫头虎分享No bug正文

1. ? Windows 平台

1.1 环境变量基础

Windows 管理可执行程序的核心是 系统路径(PATH) 与 环境变量(Environment Variables)。切换 JDK 版本,本质上就是让系统在

PATH
中优先找到对应版本的
java.exe
javac.exe
1.2 安装多个 JDK 从 Oracle 官网或 AdoptOpenJDK 下载所需版本的 Windows 安装包(
.exe
)。 依次安装到不同目录,如:
C:\Program Files\Java\jdk1.8.0_381
C:\Program Files\Java\jdk-17.0.7
1.3 手动切换 打开系统环境变量: 右键「此电脑」→「属性」→「高级系统设置」→「环境变量」。 找到 系统变量 中的
JAVA_HOME
PATH
: 修改
JAVA_HOME
为目标 JDK 目录。在
PATH
里,将
%JAVA_HOME%\bin
放到最前面。 点击「确定」,重新打开命令行窗口,即可
java -version
验证。
1.4 使用批处理脚本自动切换

为了避免每次手动修改环境变量,可编写简单的

.bat
脚本:
<pre class="brush:php;toolbar:false;">@echo offREM 切换到 Java 8setx JAVA_HOME "C:\Program Files\Java\jdk1.8.0_381" /Msetx PATH "%%JAVA_HOME%%\bin;%%PATH%%" /Mecho 已切换到 Java 8
保存为
switch-to-java8.bat
,右键以管理员身份运行。同理可写
switch-to-java17.bat
。运行后重启命令行窗口即可生效。

2. ? macOS 平台

2.1
/usr/libexec/java_home
命令

macOS 自带命令

/usr/libexec/java_home
,可列出并切换已安装的 JDK 版本。
<pre class="brush:php;toolbar:false;"># 列出所有已安装JDK/usr/libexec/java_home -V# 切换到 Java 11export JAVA_HOME=$(/usr/libexec/java_home -v 11)export PATH=$JAVA_HOME/bin:$PATH
-V
:显示版本列表及安装路径。
-v <version>
:选择指定版本。

将上述两行写入

~/.zshrc
~/.bash_profile
,并配合 alias:
<pre class="brush:php;toolbar:false;">alias j8='export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)'alias j11='export JAVA_HOME=$(/usr/libexec/java_home -v 11)'alias j17='export JAVA_HOME=$(/usr/libexec/java_home -v 17)'

打开新终端后,输入

j11
即可切换。
2.2 使用 jEnv 统一管理(推荐)

jEnv 是跨平台的 Java 版本管理工具,支持 macOS、Linux。

安装 jEnv(需先安装 Homebrew):

<pre class="brush:php;toolbar:false;">brew install jenv

将 jEnv 集成到 shell 配置:

<pre class="brush:php;toolbar:false;">echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.zshrcecho 'eval "$(jenv init -)"' >> ~/.zshrcsource ~/.zshrc

添加已安装的 JDK:

<pre class="brush:php;toolbar:false;">jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_381.jdk/Contents/Homejenv add /Library/Java/JavaVirtualMachines/jdk-17.0.7.jdk/Contents/Home

列出与切换:

<pre class="brush:php;toolbar:false;">jenv versionsjenv global 11          # 全局切换到 Java 11jenv local 1.8 .        # 针对当前目录切换到 Java 1.8jenv shell 17           # 仅对当前 shell 有效

jEnv 会自动管理

JAVA_HOME
PATH
,并支持插件扩展(Maven、Gradle 插件等)。

3. ? Ubuntu 平台(Debian系)

3.1
update-alternatives
原理Debian/Ubuntu 引入
alternatives
系统,允许对系统命令(如
java
javac
)创建“组”,并在组内注册多个“备选项”。每个备选项由 可执行文件路径 和 优先级 组成。运行
update-alternatives --config <name>
即可交互式切换。
3.2 安装与注册 JDK
3.2.1 使用 APT 安装(OpenJDK)
<pre class="brush:php;toolbar:false;">sudo apt updatesudo apt install -y openjdk-8-jdk openjdk-11-jdk openjdk-17-jdk

APT 安装后通常会自动注册到 alternatives,您可以直接执行下一步。

3.2.2 手动下载并注册 Oracle JDK

下载并解压到

/usr/lib/jvm
<pre class="brush:php;toolbar:false;">sudo mkdir -p /usr/lib/jvmsudo tar -xzf ~/Downloads/jdk-17.0.7_linux-x64_bin.tar.gz -C /usr/lib/jvm

注册到 alternatives(以 Java 17 为例,优先级设为 2):

<pre class="brush:php;toolbar:false;">sudo update-alternatives --install /usr/bin/java   java   /usr/lib/jvm/jdk-17.0.7/bin/java   2sudo update-alternatives --install /usr/bin/javac  javac  /usr/lib/jvm/jdk-17.0.7/bin/javac  2sudo update-alternatives --install /usr/bin/jar    jar    /usr/lib/jvm/jdk-17.0.7/bin/jar    2
第三个参数为命令组名(可省略后缀)。最后一个数字为优先级,数值越大越优先。
3.3 切换与查看
查看当前注册项
<pre class="brush:php;toolbar:false;">update-alternatives --query java

输出包含所有

java
备选路径及当前选择。
交互式切换
<pre class="brush:php;toolbar:false;">sudo update-alternatives --config java

会列出所有已注册的 Java 可执行文件,按提示输入对应序号即可切换。 同理切换

javac
jar
等。

4. ✅ 验证与示例

无论在哪个平台,切换后都应首先验证:

<pre class="brush:php;toolbar:false;">java -versionjavac -version

并可编写最简单的 HelloWorld 程序进行编译与运行测试。

5. ?️ 常见问题与解决

场景

PIA PIA

全面的AI聚合平台,一站式访问所有顶级AI模型

PIA226 查看详情 PIA

原因与排查

解决思路

切换后 java -version 仍指向旧版本

PATH 未更新或 shell 缓存未刷新

重新打开终端;Windows 重启 CMD;Linux hash -r

Windows 脚本执行报 “权限不足”

未以管理员身份运行 .bat

右键 → “以管理员身份运行”

macOS /usr/libexec/java_home 列不全

JDK 未正确安装到 /Library/Java/...

检查 JDK 文件夹;重启 shell

Ubuntu 手动注册后未见新选项

alternatives 配置不一致

再次执行 --install;检查路径拼写

6. ❓ 常见 QA Q:为什么 Linux 上要用
update-alternatives
? A:它能同时管理多个版本的同名命令,避免手动修改 PATH,且支持优先级与脚本化。 Q:Windows 有没有类似
update-alternatives
的工具? A:官方没有,但可借助 jabba 或自定义批处理脚本。 Q:macOS 上除了 jEnv 还有其他方案吗? A:也可使用 SDKMAN! 管理,但 SDKMAN! 对 Windows 支持有限。

? 总结

本文深入对比了 Windows、macOS 和 Ubuntu 三大平台上多版本 Java JDK 管理的思路与实践:

Windows:环境变量 + 批处理脚本macOS:
/usr/libexec/java_home
+ jEnvUbuntu:
update-alternatives
原理详解

掌握上述方法后,无论在本地开发还是在 CI/CD 环境,都能灵活切换 JDK 版本,确保兼容性与高效协同开发。祝您 Java 开发之路顺畅!?

多项目开发环境:如何使用update-alternatives管理多版本Java JDK?(Windows、Mac、Ubuntu)猫头虎粉丝福利

? 更多信息:有任何疑问或者需要进一步探讨的内容,欢迎点击文末名片获取更多信息。我是猫头虎博主,期待与您的交流! ??

联系我与版权声明 ?联系方式: 公众号: 猫头虎技术团队版权声明: 本文为原创文章,版权归作者所有。未经许可,禁止转载。更多内容请访问猫头虎的博客首页。

点击✨⬇️

下方名片
⬇️✨,加入猫头虎AI共创社群矩阵。一起探索科技的未来,共同成长。?

? 猫头虎抱团AI共创社群 | ? Go语言VIP专栏 | ? GitHub 代码仓库 | ? Go生态洞察专栏

✨ 猫头虎精品博文

以上就是多项目开发环境:如何使用update-alternatives管理多版本Java JDK?(Windows、Mac、Ubuntu)的详细内容,更多请关注知识资源分享宝库其它相关文章!

相关标签: oracle linux java git go windows github go语言 微信 电脑 ubuntu 工具 Java spring spring boot maven jvm sdkman switch Go语言 github windows macos oracle gradle linux ubuntu bug debian 自动化 大家都在看: 【DB笔试面试860】在Oracle中,如何判断Oracle是32位还是64位? 实战篇:Oracle分区表必知必会【在线重定义】 oracle 11g如何完全卸载 原 彻底的卸载干净oracle 11g Oracle 11g安装时报启动服务出现错误,找不到OracleMTSRecoveryService的解决方法

标签:  多项 如何使用 版本 

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。