如何在 Ubuntu 上使用 Apt 安装 Java

发表于:昨天 12:41 9
如何在 Ubuntu 上使用 Apt 安装 Java

简介
Java 是运行和构建许多流行应用程序和服务(包括应用服务器、CI 工具和分布式系统)所必需的。在 Ubuntu 上,推荐的 Java 安装方式是通过操作系统提供的 OpenJDK 软件包。在本指南中,您将使用 apt 包管理器在 Ubuntu 24.04 LTS 上安装 Java。您将从 OpenJDK 开始,这是 Ubuntu 上默认且推荐的 Java 实现。您将了解 JRE 和 JDK 的区别,安装多个 Java 版本,管理多个安装,并配置 JAVA_HOME 环境变量。在本教程结束时,您将拥有一个适用于运行和开发 Java 应用程序的 Java 环境。

关键要点:

  • Ubuntu 24.04 使用 OpenJDK 21 作为默认 Java 版本,对于大多数用户来说,这是推荐的长期支持版本。
  • default-jdk 软件包同时安装了 Java 运行时和开发工具,是大多数系统的最佳选择。
  • default-jre 软件包仅安装运行时,适用于运行预构建 Java 应用程序的系统。
  • Ubuntu 允许多个 Java 版本并行安装而不会冲突。
  • update-alternatives 系统控制默认使用哪个 Java 版本(包括 java 和 javac)。
  • 设置 JAVA_HOME 环境变量有助于避免构建工具和应用服务器的问题。
  • OpenJDK 和 Oracle JDK 在大多数用例中兼容,但 Oracle JDK 需要手动安装和许可证审查。
  • 常见的 Java 安装问题通常由版本不匹配、缺少 JDK 工具或配置路径错误引起。


先决条件
要遵循本教程,您需要:

注意:本教程使用 Ubuntu 24.04 服务器进行测试。大多数命令应该适用于较新的 Ubuntu 版本,但软件包版本和默认值可能有所不同。

理解 default-jdk 与 default-jre
在 Ubuntu 上安装 Java 之前,您会看到两个常见的软件包选项:default-jdk 和 default-jre。虽然它们听起来相似,但用途不同,选择正确的选项可以节省后续时间。

JRE 与 JDK:有什么区别?
从高层次来看,Java 分为两部分:

  • Java 运行时环境 (JRE):JRE 允许您的系统运行 Java 应用程序。它包括 Java 虚拟机 (JVM) 和执行已编译 Java 程序所需的核心类库。
  • Java 开发工具包 (JDK):JDK 包含 JRE 中的所有内容,外加开发工具。这些工具允许您构建、编译、调试和打包 Java 应用程序。其中最常用的工具是 Java 编译器 javac。

如果您只安装了 JRE,可以运行现有的 .jar 文件,但无法编译 Java 源代码。

Ubuntu 的 default-* 软件包提供什么
Ubuntu 通过提供两个指向系统默认 Java 版本的便利软件包来简化 Java 安装。
  1. 软件包        包含内容        典型用例
  2. default-jdk    JDK 和 JRE     开发、构建服务器、CI 流水线、大多数服务器
  3. default-jre    JRE 仅        运行预构建的 Java 应用程序
复制代码

这些软件包本身不包含 Java。相反,它们依赖于 Ubuntu 提供的当前默认 OpenJDK 版本。在 Ubuntu 24.04 上,该版本是 OpenJDK 21。

何时应该安装 default-jre?
仅在有限的情况下安装 default-jre 才有意义,例如:

  • 仅运行单个 Java 应用程序的最小化系统
  • 减少软件包大小很重要的容器镜像
  • 具有锁定运行时且无构建步骤的生产服务器

即使在这些情况下,许多管理员仍然选择 JDK 以避免未来的限制。

为什么 default-jdk 通常是更好的选择
对于大多数用户来说,default-jdk 是正确的选项,即使您不打算立即编写 Java 代码,原因如下:

  • 许多工具假设 javac 可用,即使编译是间接发生的
  • 构建系统如 Maven 和 Gradle 需要 JDK
  • 如果只安装了 JRE,CI 作业可能会失败
  • 与 JRE 相比,JDK 不会增加显著的开销

预先安装 JDK 可以避免在工具意外需要开发工具时重新安装 Java。

如果您不确定安装哪个软件包,请选择:
  1. sudo apt install default-jdk
复制代码

这为您提供了一个完整的 Java 环境,适用于运行应用程序、构建软件和支持自动化工具,无需额外设置。

安装默认 OpenJDK(推荐)
对于大多数用户来说,在 Ubuntu 上安装 Java 最简单、最可靠的方法是使用操作系统提供的 OpenJDK 软件包。这些软件包由 Ubuntu 维护,定期接收安全更新,并与系统其他部分无缝集成。

在 Ubuntu 24.04 LTS 上,默认 Java 版本是 OpenJDK 21,这是 Ubuntu 24.04 的当前长期支持 (LTS) 版本。LTS 版本设计用于稳定性和长期维护,是服务器、开发机器和生产系统的良好选择。

首先更新您的软件包索引:
  1. sudo apt update
复制代码

接下来,检查是否已安装 Java:
  1. java -version
复制代码

如果未安装 Java,您将看到一条消息,指示找不到该命令。
输出
Command 'java' not found, but can be installed with:
sudo apt install default-jre            # version 2:1.17-75, or
sudo apt install openjdk-17-jre-headless # version 17.0.17+10-1~24.04
sudo apt install openjdk-21-jre-headless # version 21.0.9+10-1~24.04
sudo apt install openjdk-11-jre-headless # version 11.0.29+7-1ubuntu1~24.04
sudo apt install openjdk-25-jre-headless # version 25.0.1+8-1~24.04
sudo apt install openjdk-8-jre-headless  # version 8u472-ga-1~24.04
sudo apt install openjdk-19-jre-headless # version 19.0.2+7-4
sudo apt install openjdk-20-jre-headless # version 20.0.2+9-1
sudo apt install openjdk-22-jre-headless # version 22~22ea-1

运行以下命令安装默认 JDK:
  1. sudo apt install default-jdk
复制代码

这将安装 OpenJDK 21 以及所需的运行时库。要验证安装,请运行:
  1. java -version
复制代码

您应该看到类似于以下的输出(确切版本可能不同):
输出
openjdk version "21.0.9" 2025-10-21
OpenJDK Runtime Environment (build 21.0.9+10-Ubuntu-124.04)
OpenJDK 64-Bit Server VM (build 21.0.9+10-Ubuntu-124.04, mixed mode, sharing)

注意:确切的补丁版本和构建号可能因可用的安全更新而异。

通过运行以下命令确认 Java 编译器可用:
  1. javac -version
复制代码

预期输出:
输出
javac 21.0.9

您的系统现在已安装了一个完整的 Java 开发环境。

安装特定 OpenJDK 版本
在大多数情况下,安装默认 OpenJDK 软件包就足够了。然而,某些应用程序或组织需要特定的 Java 版本,特别是在长期运行的生产环境中或匹配现有运行时。

Ubuntu 允许同时安装多个 OpenJDK 版本。每个版本都放置在自己的目录中,不会覆盖其他版本,因此安装多个版本是安全的。

显式安装 OpenJDK 21
如果您想直接安装 OpenJDK 21,而不是依赖 default-jdk,请运行:
  1. sudo apt install openjdk-21-jdk
复制代码

这将安装 Java 21 的 Java 运行时和开发工具。

在 Java 21 旁边安装 OpenJDK 17
Java 17 仍然广泛使用,可能被某些应用程序需要。您可以使用以下命令在 Java 21 旁边安装它:
  1. sudo apt install openjdk-17-jdk
复制代码

安装后,两个版本都将存在于 /usr/lib/jvm 下,例如:

  • /usr/lib/jvm/java-21-openjdk-amd64
  • /usr/lib/jvm/java-17-openjdk-amd64


安装额外的 Java 版本不会自动更改活动版本。Ubuntu 继续使用当前默认版本,直到您切换它。

检查已安装和活动版本
要查看安装了哪些 Java 版本,请运行:
  1. ls /usr/lib/jvm
复制代码

要检查当前正在使用的版本,请运行:
  1. java -version
复制代码

使用 update-alternatives 处理已安装版本之间的切换,这将在下一节中介绍。

使用 update-alternatives 管理多个 Java 版本
当您在 Ubuntu 上安装多个 Java 版本时,系统需要一种方式来决定默认使用哪个版本。Ubuntu 通过一个称为 update-alternatives 的机制来处理,该机制管理系统命令的符号链接。

update-alternatives 管理常见命令(如 java 和 javac)的符号链接。这允许多个版本的同一工具共存,但一次只有一个处于活动状态。

查看可用的 Java 版本
要查看哪些 Java 运行时可用以及当前选择了哪一个,请运行:
  1. sudo update-alternatives --config java
复制代码

您将看到类似于以下的输出:
输出
There are 2 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                            Priority   Status
--------------------------------------------------------------
  0            /usr/lib/jvm/java-21-openjdk-amd64/bin/java      2111      auto mode
* 1            /usr/lib/jvm/java-17-openjdk-amd64/bin/java      1711      manual mode

Press <enter> to keep the current choice
  • , or type selection number:

  • 每个条目显示 Java 二进制文件路径及其优先级。标记为 * 的条目是当前选择的版本。

    切换默认 Java 运行时
    要更改活动 Java 版本,请键入选择编号并按 ENTER。更改会立即对新 shell 会话和新启动的进程生效。

    切换后,通过运行以下命令确认活动版本:
    1. java -version
    复制代码

    此命令报告当前正在使用的 Java 版本,而不仅仅是系统上安装的版本。

    切换 Java 编译器
    如果您正在编译 Java 代码,还应切换 Java 编译器以匹配运行时:
    1. sudo update-alternatives --config javac
    复制代码

    保持 java 和 javac 对齐有助于避免混淆的构建或运行时问题,尤其是在处理多个项目时。

    何时使用 update-alternatives
    您通常需要在以下情况下使用 update-alternatives:

    • 您安装了多个 Java 版本
    • 应用程序需要特定的 Java 版本
    • 您正在跨环境测试或升级 Java

    如果只安装了一个 Java 版本,update-alternatives 仍然存在,但不需要手动更改。

    设置 JAVA_HOME 环境变量
    许多基于 Java 的工具和框架依赖 JAVA_HOME 环境变量来确定系统上 Java 的安装位置。虽然一些现代工具可以自动检测 Java,但显式设置 JAVA_HOME 可以避免歧义并有助于防止配置问题。

    为什么 JAVA_HOME 重要
    JAVA_HOME 变量指向 Java 安装的根目录。构建工具如 Maven 和 Gradle 使用此变量来定位 Java 编译器和运行时。一些应用服务器和启动脚本也需要在运行之前设置 JAVA_HOME。

    如果 JAVA_HOME 缺失或不正确,基于 Java 的工具可能无法启动或可能使用意外的 Java 版本。

    找到正确的 Java 安装路径
    在设置 JAVA_HOME 之前,您需要确定 Java 在系统上的安装位置。您可以使用 update-alternatives 系统来识别活动 Java 二进制文件。

    运行以下命令:
    1. sudo update-alternatives --config java
    复制代码

    此命令显示可用的 Java 安装及其完整路径。每个路径以 /bin/java 结尾。您应该复制目录路径,不包括 /bin/java 部分。

    例如,如果选择的路径是:
    /usr/lib/jvm/java-21-openjdk-amd64/bin/java

    那么正确的 JAVA_HOME 值是:
    /usr/lib/jvm/java-21-openjdk-amd64

    系统范围设置 JAVA_HOME
    如果您希望 JAVA_HOME 对所有用户和系统服务可用,应在 /etc/environment 中设置它。使用文本编辑器打开文件:
    1. sudo nano /etc/environment
    复制代码

    在文件末尾添加以下行,将路径替换为您的 Java 安装目录:
    1. JAVA_HOME="/usr/lib/jvm/java-21-openjdk-amd64"
    复制代码

    保存文件并退出编辑器。要将更改应用到当前 shell 会话,重新加载环境变量,或注销并重新登录:
    1. source /etc/environment
    复制代码

    您可以通过运行以下命令验证变量是否设置正确:
    1. echo $JAVA_HOME
    复制代码

    该命令应打印您配置的路径。

    为单个用户设置 JAVA_HOME
    如果您只需要 JAVA_HOME 用于您自己的用户帐户,可以将同一行添加到 ~/.profile 文件中,而不是 /etc/environment。这种方法将设置限制在您的用户会话中,不影响系统服务或其他用户。

    编辑 ~/.profile 后,您必须注销并重新登录,或重新加载文件,以使更改生效。

    注意:您不应在 JAVA_HOME 路径中包含 /bin 目录。您还应避免将 JAVA_HOME 设置为符号链接,除非您了解其解析方式。使用 /usr/lib/jvm 下的完整安装目录可提供最可预测的结果。

    安装 Oracle JDK(可选)
    在大多数情况下,OpenJDK 是推荐且足够的选择。然而,某些供应商、遗留应用程序或商业支持协议可能要求使用 Oracle JDK。在这些情况下,您可以安装 Oracle JDK 与 OpenJDK 并存,并在需要时选择它。

    在继续之前,您应该知道 Oracle JDK 是根据商业许可证分发的。您应审查 Oracle 的许可条款以确保合规,特别是对于生产或商业用途。

    Oracle JDK 不通过 Ubuntu 的软件包仓库提供,也不会通过 apt 自动更新。

    下载 Oracle JDK
    首先访问 Oracle 的官方 Java SE 下载页面,选择 Linux 所需的 JDK 版本。下载与您的系统架构匹配的 .tar.gz 存档。

    下载完成后,如果您在另一台机器上下载了存档,请将其传输到您的 Ubuntu 系统。

    提取和安装 Oracle JDK
    切换到存档所在的目录并提取它:
    1. tar -xvf jdk-21_linux-x64_bin.tar.gz
    复制代码

    接下来,将提取的目录移动到 /usr/lib/jvm,这是 Ubuntu 上 Java 安装的标准位置:
    1. sudo mkdir -p /usr/lib/jvm
    2. sudo mv jdk-21* /usr/lib/jvm/
    复制代码

    将 Oracle JDK 放置在此目录中可使其与 OpenJDK 安装保持一致,并简化版本管理。

    向 update-alternatives 注册 Oracle JDK
    要允许 Ubuntu 管理 Oracle JDK 与 OpenJDK 并存,您必须向 update-alternatives 注册它。

    注册 Java 运行时:
    1. sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-21/bin/java 3000
    复制代码

    注册 Java 编译器:
    1. sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk-21/bin/javac 3000
    复制代码

    这些命令通知系统 Oracle JDK 是一个可用的 Java 选项,并为其分配优先级。

    选择 Oracle JDK 作为默认
    如果您想使用 Oracle JDK 作为活动 Java 版本,请使用 update-alternatives 选择它:
    1. sudo update-alternatives --config java
    2. sudo update-alternatives --config javac
    复制代码

    做出选择后,验证活动版本:
    1. java -version
    2. javac -version
    复制代码

    如果选择了 Oracle JDK,输出应指示 Oracle JDK。

    注意:如果您依赖其他 Java 工具(如 keytool 或 javadoc),您可能还想注册它们。

    为 Oracle JDK 设置 JAVA_HOME
    如果您计划定期使用 Oracle JDK,应更新 JAVA_HOME 环境变量以指向 Oracle 安装目录:
    1. JAVA_HOME="/usr/lib/jvm/jdk-21"
    复制代码

    您可以根据需要在 /etc/environment 中系统范围设置此值,或在 ~/.profile 中为单个用户设置。

    持续维护注意事项
    与通过 apt 安装的 OpenJDK 不同,Oracle JDK 不会自动更新。您负责监控安全更新并手动安装新版本。因此,除非供应商或支持协议明确要求 Oracle JDK,否则许多用户更喜欢 OpenJDK。

    常见错误和故障排除
    在 Ubuntu 上安装 Java 通常很简单,但由于版本冲突、配置错误或环境变量,仍然可能出现问题。本节涵盖常见问题并解释如何解决它们。

    java: command not found
    此错误意味着未安装 Java,或者 Java 二进制文件在系统的 PATH 环境变量中不可用。

    首先,验证是否安装了 Java:
    1. java -version
    复制代码

    如果找不到命令,请安装默认 JDK:
    1. sudo apt update
    2. sudo apt install default-jdk
    复制代码

    如果已安装 Java 但命令仍然失败,系统可能未指向活动 Java 安装。在这种情况下,检查配置的替代项:
    1. sudo update-alternatives --config java
    复制代码

    选择有效的 Java 路径并再次验证。

    Java 已安装,但使用了错误的版本
    当安装了多个 Java 版本且系统使用的版本与预期不同时,会出现此问题。

    检查活动 Java 版本:
    1. java -version
    复制代码

    如果版本不是您想要的,请使用 update-alternatives 更改它:
    1. sudo update-alternatives --config java
    2. sudo update-alternatives --config javac
    复制代码

    确保 java 和 javac 指向同一版本以避免兼容性问题。

    javac: command not found
    此错误意味着仅安装了 Java 运行时环境,未安装 Java 开发工具包。

    确认是否安装了 JDK:
    1. javac -version
    复制代码

    如果找不到命令,请安装 JDK:
    1. sudo apt install default-jdk
    复制代码

    JDK 包括编译器,是构建 Java 应用程序所必需的。

    JAVA_HOME 未设置或指向错误位置
    如果 JAVA_HOME 缺失或配置不正确,某些工具无法启动。

    检查是否设置了 JAVA_HOME:
    1. echo $JAVA_HOME
    复制代码

    如果输出为空或不正确,确定正确的 Java 路径:
    1. sudo update-alternatives --config java
    复制代码

    复制目录路径(不包括 /bin/java)并相应更新 JAVA_HOME。例如:
    1. JAVA_HOME="/usr/lib/jvm/java-21-openjdk-amd64"
    复制代码

    更新值后,重新加载您的环境或注销并重新登录。

    UnsupportedClassVersionError
    此错误通常意味着应用程序是用比当前安装的 Java 版本更新的 Java 版本编译的。错误消息通常提到类文件版本号。

    检查您的 Java 版本:
    1. java -version
    复制代码

    如果版本比要求的旧,请安装较新的 OpenJDK 版本并使用 update-alternatives 切换到它。例如,安装 OpenJDK 21 可解决大多数版本不匹配问题。

    使用 apt 安装软件包时出错
    如果 apt 无法安装 Java 软件包,软件包索引可能已过时或部分损坏。

    更新软件包索引:
    1. sudo apt update
    复制代码

    如果问题仍然存在,修复损坏的依赖项:
    1. sudo apt --fix-broken install
    复制代码

    然后重试安装。

    Oracle JDK 已安装但未检测到
    如果您手动安装了 Oracle JDK,但 java -version 仍然显示 OpenJDK,Oracle JDK 可能未向 update-alternatives 注册。

    注册 Oracle Java 二进制文件并选择它们:
    1. sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-21/bin/java 3000
    2. sudo update-alternatives --config java
    复制代码

    选择 Oracle JDK 后,使用 java -version 验证更改。

    验证您的 Java 设置
    故障排除完成后,始终使用这些命令验证您的设置:
    1. java -version
    2. javac -version
    3. echo $JAVA_HOME
    复制代码

    所有三个都应反映您打算使用的 Java 版本。

    常见问题解答

    1. 我应该在 Ubuntu 24.04 上安装哪个 Java 版本?
    OpenJDK 21 是 Ubuntu 24.04 上的默认 LTS 版本。OpenJDK 21 提供长期稳定性、定期安全更新以及与现代 Java 框架和工具的广泛兼容性。如果应用程序明确要求旧版本,OpenJDK 17 仍然受支持且常用。

    2. JDK 和 JRE 有什么区别?
    Java 运行时环境 (JRE) 允许您运行 Java 应用程序,但不包括构建或编译它们的工具。Java 开发工具包 (JDK) 包括 JRE 外加开发工具,如 Java 编译器 (javac)。如果您计划开发 Java 应用程序、构建项目或运行 CI 流水线,则需要 JDK。如果您不确定选择哪一个,安装 JDK 是更安全的选择。

    3. OpenJDK 与 Oracle Java 相同吗?
    OpenJDK 和 Oracle Java 基于相同的 Java 规范,在大多数用例中功能兼容。OpenJDK 是开源的,是 Ubuntu 提供和维护的版本。Oracle Java 根据商业许可证分发,可能被某些供应商支持的产品需要。对于大多数用户和工作负载,OpenJDK 足够且推荐。

    4. 如何在 Ubuntu 上检查我的 Java 版本?
    您可以通过运行以下命令检查已安装和活动的 Java 版本:
    1. java -version
    复制代码

    此命令显示当前正在使用的 Java 运行时版本。要检查编译器版本,您可以运行 javac -version。

    5. 我可以同时安装多个 Java 版本吗?
    是的,Ubuntu 允许您并行安装多个 Java 版本。每个版本都安装在 /usr/lib/jvm 下自己的目录中,不会覆盖其他版本。当不同应用程序需要不同 Java 版本或您想安全测试升级时,此设置很有用。

    6. 如何更改默认 Java 版本?
    您可以使用 update-alternatives 系统更改默认 Java 版本。要选择默认 Java 运行时,请运行:
    1. sudo update-alternatives --config java
    复制代码

    要选择匹配的 Java 编译器,请运行:
    1. sudo update-alternatives --config javac
    复制代码

    您应确保 java 和 javac 指向同一版本以避免构建或运行时问题。

    7. 我需要设置 JAVA_HOME 吗?
    一些基于 Java 的工具和构建系统依赖 JAVA_HOME 环境变量来定位 Java。虽然许多现代工具可以自动检测 Java,但显式设置 JAVA_HOME 有助于避免配置问题。如果您使用工具如 Maven、Gradle 或应用服务器,建议设置 JAVA_HOME。

    8. 如何从 Ubuntu 卸载 Java?
    要删除特定的 OpenJDK 软件包,您可以使用 apt。例如,要删除 OpenJDK 21,请运行:
    1. sudo apt remove openjdk-21-jdk
    复制代码

    如果您还想删除未使用的依赖项,请运行:
    1. sudo apt autoremove
    复制代码

    如果安装了多个 Java 版本,删除一个版本不会影响其他版本。您可以通过列出 /usr/lib/jvm 的内容或使用 java -version 检查活动版本来验证剩余的安装。

    结论
    在本教程中,您使用 apt 包管理器在 Ubuntu 服务器上安装了 Java,并学习了如何有效管理 Java 安装。您安装了 OpenJDK 21,探索了 JRE 和 JDK 之间的区别,使用 update-alternatives 在 Java 版本之间切换,配置了 JAVA_HOME 环境变量,并可选地安装了 Oracle JDK 用于专业用例。

    对于大多数用户来说,OpenJDK 提供了运行和构建 Java 应用程序所需的一切,只需最少的努力和持续的安全更新。Oracle JDK 在需要时仍然是一个选项,但它带有额外的许可和维护考虑。

    您的系统现在已准备好自信地运行 Java 应用程序和构建 Java 项目。

    有关更详细的教程,请查看以下文章:




    原文链接:How To Install Java with Apt on Ubuntu
    收藏
    送赞
    分享

    发表回复