当前位置: 首页 > news >正文

Linux上安装多个JDK版本,需要配置环境变量吗

简短回答:不需要同时配置多个 JDK 的 JAVA_HOMEPATH,但你可以安装多个版本,并通过灵活的方式在它们之间切换。


文章目录

      • ✅ 正确做法:安装多个 JDK,但只让一个生效(通过环境变量或 `alternatives`)
        • 📌 为什么不能同时配置多个?
    • ✅ 推荐方案一:使用 `alternatives` 管理(推荐,适合系统级切换)
      • 1. 安装多个 JDK(示例)
      • 2. 使用 `alternatives` 注册
      • 3. 切换版本
      • ✅ 优点
    • ✅ 推荐方案二:只配置一个 `JAVA_HOME`(适合固定环境)
    • ✅ 推荐方案三:按用户或项目配置(适合开发环境)
    • ✅ 总结:最佳实践
      • 🔁 验证当前使用的是哪个 JDK

✅ 正确做法:安装多个 JDK,但只让一个生效(通过环境变量或 alternatives

📌 为什么不能同时配置多个?
  • JAVA_HOME 是一个环境变量,只能指向一个路径
  • PATH 中的 bin 目录如果包含多个 java,系统只会使用第一个找到的
  • 如果你在 PATH 中同时加入多个 JDK 的 bin,容易导致混乱,难以控制使用的是哪个版本。

✅ 推荐方案一:使用 alternatives 管理(推荐,适合系统级切换)

这是 CentOS/RHEL 系统的标准做法,可以轻松切换默认的 javajavac 等命令。

1. 安装多个 JDK(示例)

假设你已经安装了:

  • JDK 8: /usr/lib/jvm/jdk8u432-b05
  • JDK 11: /usr/lib/jvm/temurin-11-jdk
  • JDK 21: /usr/lib/jvm/temurin-21-jdk

2. 使用 alternatives 注册

# 注册 java 命令
sudo alternatives --install /usr/bin/java java /usr/lib/jvm/jdk8u432-b05/bin/java 1
sudo alternatives --install /usr/bin/java java /usr/lib/jvm/temurin-11-jdk/bin/java 2
sudo alternatives --install /usr/bin/java java /usr/lib/jvm/temurin-21-jdk/bin/java 3# 注册 javac 命令(可选)
sudo alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk8u432-b05/bin/javac 1
sudo alternatives --install /usr/bin/javac javac /usr/lib/jvm/temurin-11-jdk/bin/javac 2
sudo alternatives --install /usr/bin/javac javac /usr/lib/jvm/temurin-21-jdk/bin/javac 3

3. 切换版本

sudo alternatives --config java

会弹出菜单让你选择使用哪个 JDK:

There are 3 programs which provide 'java'.Selection    Command
-----------------------------------------------
*+ 1           /usr/lib/jvm/jdk8u432-b05/bin/java2           /usr/lib/jvm/temurin-11-jdk/bin/java3           /usr/lib/jvm/temurin-21-jdk/bin/javaEnter to keep the current selection[+], or type selection number: 

输入编号即可切换。

✅ 优点

  • 全局生效,所有用户都使用统一版本。
  • 切换简单,命令清晰。
  • 符合 Linux 系统管理规范。

✅ 推荐方案二:只配置一个 JAVA_HOME(适合固定环境)

如果你确定长期使用某个版本(如 JDK 8),可以只配置一个环境变量。

# /etc/profile.d/java.sh
export JAVA_HOME=/usr/lib/jvm/jdk8u432-b05
export PATH=$JAVA_HOME/bin:$PATH

其他 JDK 只需解压到 /usr/lib/jvm/ 目录即可,不需要配置环境变量,需要时手动调用:

# 临时使用 JDK 11
/usr/lib/jvm/temurin-11-jdk/bin/java -version# 或临时切换
export JAVA_HOME=/usr/lib/jvm/temurin-11-jdk
$JAVA_HOME/bin/java -version

✅ 推荐方案三:按用户或项目配置(适合开发环境)

不同用户或项目使用不同 JDK:

# 用户家目录下的 .bashrc
# 用户 A 用 JDK 8
export JAVA_HOME=/usr/lib/jvm/jdk8u432-b05# 用户 B 用 JDK 11
export JAVA_HOME=/usr/lib/jvm/temurin-11-jdk

或者在项目脚本中指定:

#!/bin/bash
export JAVA_HOME=/usr/lib/jvm/temurin-11-jdk
./mvnw compile

✅ 总结:最佳实践

方案适用场景是否需要配置多个环境变量
alternatives系统管理员,全局切换❌ 只注册,不同时生效
单一 JAVA_HOME固定使用一个版本❌ 只配置一个
手动调用路径临时使用其他版本❌ 不配置,直接调用
用户级配置多用户不同需求✅ 每个用户可不同
项目级脚本CI/CD、构建脚本✅ 按需设置

🔁 验证当前使用的是哪个 JDK

java -version
echo $JAVA_HOME
which java

结论:

不需要同时配置多个 JDK 的环境变量!

正确做法是:

  1. 安装多个 JDK 到不同目录(如 /usr/lib/jvm/ 下)。
  2. 使用 alternativesJAVA_HOME 切换当前默认版本
  3. 其他版本按需手动调用。
http://www.dtcms.com/a/341283.html

相关文章:

  • STM32存储结构
  • Vue3 结合 html2canvas 生成图片
  • GISBox工具:FBX到3DTiles文件转换指南
  • SpringBoot - 公共字段自动填充的6种方案
  • 使用安卓平板,通过USB数据线(而不是Wi-Fi)来控制电脑(版本1)
  • Mac编译Android AOSP
  • Vue2+Vue3前端开发_Day3
  • vue3中,如何解决数字精度问题(big.js的使用)
  • 计算机毕设Spark项目实战:基于大数据技术的就业数据分析系统Django+Vue开发指南
  • SQL count(*)与 sum 区别
  • 【iOS】NSRunLoop
  • Preprocessing Model in MPC 2 - 背景、基础原语和Beaver三元组
  • 计算机网络--HTTP协议
  • Jenkins服务器配置SSH
  • 强制重启导致Ubuntu24.04LTS amd的WIFI无法使用的解决方案
  • 超长视频生成新突破!LongVie框架问世,创作不再受时长限制
  • spring第9课,spring对DAO的支持
  • C语言---编译的最小单位---令牌(Token)
  • 基于 Java 调用泛微 OA WebService 创建表单流程
  • 如何保障内部网络安全前提下,实现与外部互联网之间的文件传输?
  • 一种融合AI与OCR的施工许可证识别技术,提升工程监管效率,实现自动化、精准化处理。
  • 【CUDA编程】CUDA编程入门第一课
  • QT聊天项目DAY20
  • 【unitrix数间混合计算】3.3 无符号整数标记trait(bin_unsigned.rs)
  • C++:仿函数部分的补充、模版进阶(非类型模版参数、模板的特化、模板的分离编译)
  • 1277. 统计全为 1 的正方形子矩阵
  • 含钼溶液中回收钼
  • 【Windows】Windows平台基于加速地址安装vcpkg并集成到Visual Studio 2017
  • MySQL 50 道经典练习题及答案
  • 使用Jmeter轻松实现AES加密测试