Centos7 JDK 多版本管理与 Maven 构建问题和注意!

Linux操作系统下 JDK 多版本管理与 Maven 构建差异

背景:

在 JDK 多版本环境下,系统通过 alternatives 控制多个 JDK 版本的切换。alternatives 是一个在 Linux 系统中用于管理多版本软件(如 Java、Python 等)工具,它允许用户轻松选择并设置不同的默认版本。这个备忘录记录了在 Ubuntu 22CentOS 7 操作系统中,Maven 在构建 Java 项目时如何处理多版本 JDK 的行为差异,并提供了相应的解决方案。

问题描述:
  1. Ubuntu 22:未设置 JAVA_HOME,系统通过 PATHalternatives 进行 JDK 多版本管理,Maven可以通过mvn clean install 构建成功。

    echo $JAVA_HOME # 无任何输出
    java -version # 输出显示为 JDK 11
    
  2. CentOS 7:未设置 JAVA_HOME 时,系统没有自动找到正确的 JDK 版本,Maven 构建失败,即使运行Ubuntu22打包好的jar包也无法运行。如:java -jar xxx.jar会报错退出,但是会显示出springboot的图标输出…

    echo $JAVA_HOME # 无任何输出
    java -version # 输出显示为 JDK 11,似乎是正常的,问题就很难发现。
    
原因分析:
  • Ubuntu 22

    • 系统较新,alternativesPATH 配置完善,能够自动选择和使用正确的 JDK 版本,即使没有手动设置 JAVA_HOME 也可以正常运行。
  • CentOS 7

    • 系统较老,虽然也使用 alternatives 进行 JDK 管理,但需要手动设置 JAVA_HOME,否则 Maven 无法找到正确的 JDK 版本。
解决方案:

针对 CentOS 7 的问题,建议进行以下操作:

  1. 显式设置 JAVA_HOME
    手动设置 JAVA_HOME 指向 JDK 11,并更新 PATH 环境变量:

    export JAVA_HOME=/usr/lib/jvm/java-11-openjdk
    export PATH=$JAVA_HOME/bin:$PATH
    

    永久生效:将上述命令添加到 ~/.bashrc~/.bash_profile 中,然后运行:

    source ~/.bashrc
    echo $JAVA_HOME # 此时应该显示未 JDK 11,而不是显示空行.
    java -version # 输出显示为 JDK 11
    
  2. 确保 alternatives 配置正确
    使用 alternatives 工具检查并设置 JDK 11 为默认版本:

    sudo alternatives --config java
    sudo alternatives --config javac
    
    

    选择 JDK 11 并确保 java -versionjavac -version 输出正确版本。

  3. 清理并重新构建
    设置好 JAVA_HOME 后,清理并重新构建项目:

    mvn clean install
    
总结:
  • Ubuntu 22:得益于系统的 alternativesPATH 管理功能,未设置 JAVA_HOME 也能自动找到并使用正确的 JDK 版本,Maven 构建成功。

  • CentOS 7:由于系统较老,alternatives 对多版本 JDK 的管理不够智能,需要手动设置 JAVA_HOME 变量,确保 Maven 能找到正确的 JDK 版本,才能完成构建。

需要注意的几点:
  1. JAVA_HOME 必须指向正确的 JDK 安装目录,特别是在多版本管理的环境中。
  2. 确认 alternatives 工具是否正确指向需要的 Java 版本。
  3. 对于老旧的系统(如 CentOS 7),需要手动进行更多的配置,而较新的系统(如 Ubuntu 22)可以自动管理多版本 JDK。
  4. 对于 Maven 构建,需要注意 尽量使用 Ubtuntu22操作系统,毕竟更新多,问题可能会被尽可能的解决。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值