Ubuntu 22.04(WSL2)上安装多个 Java 版本(以OpenJDK 和 Oracle JDK为例)

发布于:2025-06-26 ⋅ 阅读:(17) ⋅ 点赞:(0)

引言

本文详细介绍如何在运行于 WSL2的 Ubuntu 22.04 系统上安装和管理多个 Java 版本,包括 OpenJDK 11、17、21 和 Oracle JDK 11、17、21。我们会验证 Ubuntu 22.04 自带的 Java 环境,列出可用 OpenJDK 版本,澄清 OpenJDK 21 的 LTS 状态,确保安装完整的 JDK(包括 javac),解释如何检查硬件架构以选择正确的 Oracle JDK 版本,并说明如何合理设置 update-alternatives 的优先级。完成后,您将能够无缝切换不同的JDK。

第一步:验证 Ubuntu 22.04 自带的 Java 环境

Ubuntu 22.04 默认情况下可能不包含完整的 OpenJDK 安装,但某些软件包(如 default-jre 或其他依赖)可能导致安装了 Java Runtime Environment(JRE)。JRE 只包含运行 Java 程序所需的环境,而不包括开发工具(如 javac 编译器)。

检查当前 Java 环境:

java -version

如果返回类似以下内容,说明已安装 JRE(以 OpenJDK 11 为例):

openjdk version "11.0.13" 2022-01-18
OpenJDK Runtime Environment (build 11.0.13+8-0ubuntu1~22.04)
OpenJDK 64-Bit Server VM (build 11.0.13+8-0ubuntu1~22.04, mixed mode, sharing)

检查 javac 是否存在:

javac -version

如果返回 command not found,说明系统中只有 JRE,没有安装完整的 JDK(包括 javac 编译器)。

安装 OpenJDK 11 的完整 JDK

如果系统中只有 JRE,安装 OpenJDK 11 的 JDK 包以获取 javac 等开发工具:

sudo apt install openjdk-11-jdk -y

再次验证:

javac -version

应显示类似:

javac 11.0.13

注意:如果系统中未预装任何 Java 环境,java -version 将返回 command not found,可直接跳到下一步安装 OpenJDK。

第二步:更新系统软件包

确保系统软件包是最新的,以避免兼容性问题:

sudo apt update && sudo apt upgrade -y

第三步:查询和安装 OpenJDK 版本

Ubuntu 22.04 的软件源中提供了多个 OpenJDK 版本,您可以根据项目需求选择安装 OpenJDK 11、17 或 21。

查询可用 OpenJDK 版本

运行以下命令列出 Ubuntu 22.04 软件源中可用的 OpenJDK 包:

apt search openjdk | grep '^openjdk'

输出可能包括以下常见版本(具体版本可能因软件源更新而略有不同):

  • openjdk-8-jdk: OpenJDK 8,适用于较旧的项目,LTS 版本。
  • openjdk-11-jdk: OpenJDK 11,LTS 版本,广泛用于生产环境。
  • openjdk-17-jdk: OpenJDK 17,LTS 版本,适合现代 Java 应用。
  • openjdk-21-jdk: OpenJDK 21,LTS 版本,最新长期支持版本,推荐用于新项目。

注意:OpenJDK 21 是 LTS 版本,发布于 2023 年 9 月 19 日,得到 Oracle 和其他供应商(如 Eclipse Adoptium、Red Hat)的长期支持,通常持续到 2028 年 9 月(部分供应商可能延长至 2031 年)。它是生产环境的理想选择。

安装所需 OpenJDK 版本

根据需求安装特定版本,例如:

sudo apt install openjdk-11-jdk -y
sudo apt install openjdk-17-jdk -y
sudo apt install openjdk-21-jdk -y

验证安装:

java -version

默认情况下,最新安装的 OpenJDK(例如 21)可能成为系统默认版本。

第四步:安装 Oracle JDK

Oracle JDK 需要手动下载和配置。在下载前,必须检查系统硬件架构以确保选择正确的二进制文件。以下以 Oracle JDK 11、17 和 21 为例。

检查硬件架构

在下载 Oracle JDK 之前,确认系统的硬件架构以选择合适的版本(例如 x86_64 或 aarch64)。运行以下命令:

uname -m

输出说明:

  • x86_64:表示 64 位 Intel/AMD 架构(最常见,WSL2 默认使用此架构)。
  • aarch64:表示 64 位 ARM 架构(例如在某些 ARM 设备上)。

注意:WSL2 通常运行在 x86_64 架构上,但如果您在 ARM 设备上运行 Ubuntu,可能是 aarch64。Oracle JDK 11、17 和 21 提供 x86_64 和 aarch64 版本,确保下载匹配的版本。

下载 Oracle JDK

  1. 根据硬件架构,访问

    Oracle 官方网站

    ,选择 JDK 11、17 或 21 的 Linux 版本:

    • 对于 x86_64 架构,选择 Linux x64 Compressed Archive(例如 jdk-21_linux-x64_bin.tar.gz)。
    • 对于 aarch64 架构,选择 Linux AArch64 Compressed Archive(例如 jdk-21_linux-aarch64_bin.tar.gz)。
  2. 下载文件可能需要 Oracle 账户登录。将下载的文件传输到 WSL2 的 Ubuntu 系统中(例如,保存到 ~/Downloads/ 目录)。

解压并配置

以 Oracle JDK 21(x86_64 架构)为例,假设文件位于 ~/Downloads/,执行以下命令:

sudo mkdir -p /usr/local/java
sudo tar -xvzf ~/Downloads/jdk-21_linux-x64_bin.tar.gz -C /usr/local/java

对 Oracle JDK 11 和 17 重复类似操作:

sudo tar -xvzf ~/Downloads/jdk-11_linux-x64_bin.tar.gz -C /usr/local/java
sudo tar -xvzf ~/Downloads/jdk-17_linux-x64_bin.tar.gz -C /usr/local/java

如果使用 aarch64 架构,替换为对应的 aarch64 文件(如 jdk-21_linux-aarch64_bin.tar.gz)。

设置环境变量

编辑 ~/.bashrc 文件以添加 Oracle JDK 的路径(以 Oracle JDK 21 为例):

nano ~/.bashrc

在文件末尾添加:

export JAVA_HOME=/usr/local/java/jdk-21
export PATH=$JAVA_HOME/bin:$PATH

保存并应用更改:

source ~/.bashrc

验证 Oracle JDK:

java -version

应显示 Oracle JDK 21 的版本信息。切换其他 Oracle JDK 版本时,需相应修改 JAVA_HOME

第五步:管理多个 Java 版本

使用 update-alternatives 工具在不同 JDK 版本间切换。

注册 JDK 版本

为每个 JDK 配置替代项(以 OpenJDK 11、17、21 和 Oracle JDK 11、17、21 为例):

sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1111
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-17-openjdk-amd64/bin/java 1711
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-21-openjdk-amd64/bin/java 2111
sudo update-alternatives --install /usr/bin/java java /usr/local/java/jdk-11/bin/java 1101
sudo update-alternatives --install /usr/bin/java java /usr/local/java/jdk-17/bin/java 1701
sudo update-alternatives --install /usr/bin/java java /usr/local/java/jdk-21/bin/java 2101

javac 配置替代项:

sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/java-11-openjdk-amd64/bin/javac 1111
sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/java-17-openjdk-amd64/bin/javac 1711
sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/java-21-openjdk-amd64/bin/javac 2111
sudo update-alternatives --install /usr/bin/javac javac /usr/local/java/jdk-11/bin/javac 1101
sudo update-alternatives --install /usr/bin/javac javac /usr/local/java/jdk-17/bin/javac 1701
sudo update-alternatives --install /usr/bin/javac javac /usr/local/java/jdk-21/bin/javac 2101
关于优先级(Priority)的解释

update-alternatives --install 命令中,格式为:

sudo update-alternatives --install <link> <name> <path> <priority>
  • <link>:符号链接的路径(如 /usr/bin/java)。
  • <name>:替代组的名称(如 java)。
  • <path>:实际可执行文件的路径(如 /usr/lib/jvm/java-11-openjdk-amd64/bin/java)。
  • <priority>:一个整数,表示该版本的优先级。数字越大,优先级越高。

优先级的作用

  • 当运行 javajavac 时,系统会自动选择优先级最高的版本作为默认版本(除非手动指定)。
  • update-alternatives --config java 中,优先级高的版本更容易被选为默认。

如何合理设置优先级

  • 基于版本新旧:给较新的 JDK 设置更高的优先级。例如,OpenJDK 21(LTS)设为 2111,OpenJDK 17 设为 1711,OpenJDK 11 设为 1111,反映版本号顺序。

  • 基于使用频率:如果某个版本(如 OpenJDK 21)是您最常用的,给它设置最高优先级(如 3000)。

  • 基于来源:OpenJDK 和 Oracle JDK 可根据偏好设置优先级。例如,OpenJDK 版本优先级略高于 Oracle JDK(如 2111 vs 2101),以反映社区版本的优先使用。

  • 避免冲突:优先级数字应唯一,避免多个版本使用相同优先级导致选择歧义。

  • 建议范围

    :使用 1000 以上的数字,便于区分。例如:

    • OpenJDK 11:1111
    • OpenJDK 17:1711
    • OpenJDK 21:2111(LTS,建议高优先级)
    • Oracle JDK 11:1101
    • Oracle JDK 17:1701
    • Oracle JDK 21:2101
  • 手动切换:即使设置了优先级,您仍可通过 update-alternatives --config 手动选择任意版本。

切换 Java 版本

交互式选择 Java 版本:

sudo update-alternatives --config java

选择 javac 版本:

sudo update-alternatives --config javac

按提示输入数字选择所需的 JDK。验证当前版本:

java -version
javac -version

动态设置 JAVA_HOME

为不同版本动态设置 JAVA_HOME,编辑 ~/.bashrc

nano ~/.bashrc

添加以下脚本:

export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))

保存并应用:

source ~/.bashrc

验证:

echo $JAVA_HOME

第六步:验证多版本共存

检查所有安装的 Java 版本:

/usr/lib/jvm/java-11-openjdk-amd64/bin/java -version
/usr/lib/jvm/java-17-openjdk-amd64/bin/java -version
/usr/lib/jvm/java-21-openjdk-amd64/bin/java -version
/usr/local/java/jdk-11/bin/java -version
/usr/local/java/jdk-17/bin/java -version
/usr/local/java/jdk-21/bin/java -version

检查 javac

/usr/lib/jvm/java-11-openjdk-amd64/bin/javac -version
/usr/lib/jvm/java-17-openjdk-amd64/bin/javac -version
/usr/lib/jvm/java-21-openjdk-amd64/bin/javac -version
/usr/local/java/jdk-11/bin/javac -version
/usr/local/java/jdk-17/bin/javac -version
/usr/local/java/jdk-21/bin/javac -version

切换版本后,运行 java -versionjavac -versionecho $JAVA_HOME 确保配置正确。

注意事项

  • Ubuntu 22.04 默认 JRE:部分 Ubuntu 22.04 镜像(尤其在 WSL2 中)可能因依赖(如某些 IDE 或工具)预装 OpenJDK 11 的 JRE,但不含 javac。安装 openjdk-XX-jdk 可补全开发工具。
  • OpenJDK 版本支持:Ubuntu 22.04 默认软件源通常包括 OpenJDK 8、11、17 和 21(均为 LTS)。OpenJDK 21 是 LTS 版本,适合生产环境,支持至 2028 年 9 月(或更久)。
  • Oracle JDK 架构选择:下载 Oracle JDK 前,务必通过 uname -m 检查硬件架构(通常为 x86_64 或 aarch64),以确保选择正确的二进制文件。WSL2 默认使用 x86_64,但 ARM 设备可能为 aarch64。
  • Oracle JDK 许可:Oracle JDK 11、17 和 21 需要遵守许可协议,可能需要 Oracle 账户登录下载。Oracle JDK 21 在生产环境中免费,但需注意其许可条款。
  • WSL2 磁盘空间:WSL2 的磁盘空间有限,建议定期清理不再需要的 JDK 版本。
  • 权限问题:若遇到权限问题,使用 sudo 或检查文件权限(如 /usr/local/java)。
  • 优先级冲突:确保 update-alternatives 配置的优先级唯一且合理,建议按 LTS 状态或使用频率设置(如 2111 为 OpenJDK 21,2101 为 Oracle JDK 21)。

总结

通过以上步骤,您可以在 Ubuntu 22.04(WSL2)上安装和管理多个 Java 版本,包括 OpenJDK 11、17、21 和 Oracle JDK 11、17、21。使用 apt search 查询可用 OpenJDK 版本,检查硬件架构(通过 uname -m)以选择正确的 Oracle JDK 二进制文件,update-alternatives 工具通过合理设置优先级实现版本切换。OpenJDK 21 作为 LTS 版本(支持至 2028 年 9 月或更久)是生产环境的理想选择,Oracle JDK 提供类似功能但需注意许可条款。特别注意,Ubuntu 22.04 可能自带 OpenJDK 11 的 JRE,需手动安装 JDK 以获取 javac 等开发工具。

如有疑问,请查阅 OpenJDK 文档Oracle JDK 文档,或在下方留言获取帮助。


希望这篇博客对您的 Java 开发环境配置有所帮助!


网站公告

今日签到

点亮在社区的每一天
去签到