在 Ubuntu 中安装 JDK

2025年3月17日 | 阅读 12 分钟

JVM(Java 虚拟机)和 Java 是各种类型软件所必需的,包括 Jenkins、Cassandra、Glassfish、JettyTomcat。

在本文中,我们将使用 'apt' 来安装 Java Development Kit (JDK)Java Runtime Environment (JRE) 的多个版本。我们将同时安装 OpenJDK 和来自 Oracle 的官方 JDK。然后,我们将选择我们要用于项目的版本。完成后,我们将能够应用 JDK 进行软件开发,或使用 Java Runtime 来运行软件。

Ubuntu 20.04(默认)的存储库包含两个 OpenJDK 包:Java Development KitJava Runtime EnvironmentJava Runtime EnvironmentJava Virtual Machine、允许我们执行 Java 程序二进制文件组成。Java Development Kit 包含 Java Runtime Environment 以及用于构建 Java 应用程序的调试/开发工具和

  • Java Development Kit 是 Oracle Corporation 提供的 Java 技术发行版。
  • JDK 实现了 JLS(Java 语言规范)和 JVMS(Java 虚拟机规范),并提供了 API(Java 应用程序编程接口)的 SE(标准版)。
  • 它提供了用于处理 Java 应用程序的软件。
  • 一些附加软件的示例是编译器、虚拟机、调试器、性能监控工具以及 Oracle 认为对 Java 程序员有用的其他服务。
  • 此外,Oracle 已根据 NFTC(Oracle 非免费条款和条件)许可发布了最新软件版本。

Oracle 为 Linux、macOS 和 Windows 操作系统的 x86-64 架构以及 Linux 和 macOS 的 aarch64 架构发布了二进制文件。旧版本支持 SPARC 架构和 Oracle Solaris 操作系统。Oracle 对 JVMS 的主要实现称为 HotSpot

JDK 内容

JDK 作为主要组件包含一组编程工具,包括:

  • apt:它代表注释处理工具。
  • appletviewer:它可以用于在没有网页浏览器的情况下执行和调试多个 Java Applet。
  • extcheck:它是一个实用程序,用于查找 JAR 文件的冲突。
  • idlj:此实用程序代表 IDL-to-Java 编译器。它使用提供的 Java IDL 文件生成 Java 绑定。
  • java:对于 Java 应用程序,它是一个加载器和解释器,用于解释由 javac 编译器生成的多个类文件。一个启动器既不用于部署也不用于开发。sun JDK 中不再提供之前的部署启动器 jre。它已被此 java 加载器取代。
  • jabswitch:它是 Java Access Bridge。它用于公开 Microsoft Windows 操作系统中的辅助自动化。
  • javac:它是一个 Java 编译器。它将源代码转换为 Java 字节码。
  • jar:它是一个归档工具,用于将相关的类库打包到一个 JAR 文件中。此外,此工具还有助于管理 JAR 文件。
  • javadoc:它是一个文档生成器,可自动使用源代码注释生成文档。
  • javafxpackager:它是一个用于打包和签名 JavaFX 应用程序的工具。
  • javah:它是一个用于编写本地方法的存根生成器和 C 头文件。
  • jarsigner:它是一个 jar 签名和验证工具。
  • javap:它是类文件反汇编器。
  • JConsole:Java 管理和监控控制台。
  • javaws:对于 JNLP 应用程序,它是一个 Java Web Start 启动器。
  • jdb:它是一个调试器。
  • jinfo:它从活动崩溃转储或 Java 进程中提供配置详细信息。
  • jhat:它是一个 Java 堆分析工具。
  • jmap Oracle jmap:对于内存,它可以生成内存映射,可以打印给定核心转储或进程的分布式堆内存和对象内存映射详细信息。
  • jmc:它是 Java 的命令行脚本 Shell。
  • jshell:它是 Java 9 中指定的交互式求值-打印循环。
  • jstack:此实用程序可以打印 Java 堆栈跟踪。
  • jstat:它是 Java 虚拟机统计信息监控工具。
  • jstatd:它是 jstat 守护进程。
  • keytool:它是一个用于操作密钥库的工具。
  • policytool:它是一个管理和策略创建工具,可以为 Java 运行时定义策略,指定来自不同来源的代码应具有哪些权限。
  • pack200:它是一个 JAR 压缩工具。
  • VisualVM:它是一个可视化工具,用于集成许多命令行 JDK 工具、内存分析功能和轻量级性能。
  • xjc:它是 XML 绑定 API 的 Java API 部分。它解析 XML 模式并生成 Java 类。
  • wsimport:它生成 JAX-WS 的可移植工件以调用 Web 服务。

实验性工具可能不会出现在 JDK 的未来版本中。此外,JDK 提供了一个完整的 JRE(Java 运行时环境),通常称为私有运行时,因为它与“常规”JRE 隔离并且包含额外的内容。

它由 Java 虚拟机组成;生产环境中可用的每个类库,以及仅对开发人员有用的额外库,包括 IDL 库和国际化库。
此外,JDK 副本包含几个示例选择,展示了大多数 Java API 部分的用法。

其他 JDK

除了最常用的 JDK 之外,通常还有许多其他 JDK 可用于各种平台,其中一些是从 Sun JDK 源代码启动的,而另一些则不是。每个都遵循通用的 Java 规范,但在未明确指定的区域(包括优化技术、编译策略和垃圾收集)上有所不同。

它们包括:

维护或开发模式

  • z/OS、Pocket PC、OS/400、MVS、Windows、Linux、fox AIX、IBM J9 JDK
  • Aicas JamaicaVM
  • IcedTea/OpenJDK
  • 基于 OpenJDK 的 Zulu/Azul Systems,适用于 Linux、Mac OS X、Windows、云和嵌入式设备
  • 低延迟 Linux JDK,Azul Systems Zing

已停产或未维护

  • Oracle Corporation 的 JRockit JDK,适用于 Solaris、Linux 和 Windows
  • GNU 的 GCJ 和 Classpath
  • Blackdown Java:Sun 的 Linux JDK 移植版
  • Apple 的 Mac OS Runtime for Java JDK/JVM,适用于传统的 Mac OS
    Apache Harmony

JDK 版本

JDK 10

JDK 10 是 Java Community Process 中 JSR 383 指定的开源 Java SE 10 Platform 的参考实现。于 2018 年 3 月 20 日,JDK 10 完成了通用可用性。Oracle 提供的基于 GPL 的生产就绪二进制文件。此版本的计划和功能通过 JEP 流程引入和跟踪,该流程已由 JEP 2.0 提案进行了修改。

JDK 11

它于 2018 年 9 月 25 日发布,目前提供错误修复。它提供长期支持(LTS)。Java 11 包含几个新特性,其中一些如下:

  • JEP 320:删除 CORBA 和 Java EE 模块
  • JEP 318:无操作垃圾收集器:Epsilon
  • JEP 315:开发 Aarch64 Intrinsics
  • JEP 309:类文件常量
  • JEP 181:基于嵌套的访问控制

一些旧版本中的特性已被弃用;特别是,Java Web Start 和 Java Applet 不再存在。CORBA、Java EE 和 JavaFX 模块已从 JDK 中删除。

JDK 12

它于 2019 年 3 月 19 日发布。Java 12 包含几个新特性,包括:

  • JEP 334:JVM 常量 API
  • JEP 325:Switch 表达式
  • JEP 230:Microbenchmark Suite

JEP 325 预览功能扩展了 switch 语句;因此,它可以作为表达式使用,并且包含一种新的 case 标签样式,其中表达式位于右侧。不需要 break 语句。可以使用 yield 语句处理复杂表达式。

JDK 13

它于 2019 年 9 月 17 日发布。Java 13 包含以下新特性以及一些错误修复和小型改进。

  • JEP 355:文本块
  • JEP 354:Switch 表达式
  • JEP 353:重新实现旧版 Socket API
  • JEP 351:未使用的未提交内存:ZGC
  • JEP 350:CDS 存档

JDK 14

JDK 14 于 2020 年 3 月 17 日发布。它包含以下新特性以及一些错误修复和小型改进。

  • JEP 352:非易失性映射字节缓冲区
  • JEP 349:JFR 事件流
  • JEP 345:G1 NUMA 感知内存分配
  • JEP 343:打包工具
  • JEP 305:instanceof 模式匹配

JDK 15

JDK 15 于 2020 年 9 月 15 日发布。它支持文本块(多行字符串字面量)。Z 和 Shenandoah 垃圾收集器已准备好在生产环境中使用。Oracle 的 Solaris 操作系统支持已被放弃。Nashorn JavaScript 引擎已被弃用。还弃用了一些根 CA 证书。

JDK 16

JDK 16 于 2021 年 3 月 16 日发布。它放弃了 Ahead-of-Time 编译特性。Java 实现仍然并且本身是用 C++ 语言实现的,而从 Java 16 开始允许使用最新的 C++14。此外,代码已迁移到 GitHub,放弃了 Mercurial 作为源代码控制系统。

JDK 17

JDK 17 是自 2021 年 9 月起最新的 LTS 版本。此版本是自切换到新的六个月版本周期以来的第二个 LTS 版本。JEP 406 扩展了 instanceof 任务中使用的模式匹配语法,以用于 switch 表达式和语句。它允许根据参数的类别、精炼模式和 null 情况选择 case。

JDK 18

JDK 18 于 2022 年 3 月 22 日发布。一些新特性如下:

  • JEP 413:Java API 文档中的代码片段
  • JEP 408:Web 服务器
  • JEP 400:默认 UTF-8

JDK 19

JDK 19 于 2022 年 9 月 20 日发布。一些新特性如下:

  • JEP 424:内存 API & 外部函数
  • JEP 422:RISC-V/Linux 移植
  • JEP 405:Record Patterns

JEP 405 允许 Record Patterns,扩展了 switch 表达式和 instanceof 操作符的模式匹配功能,以添加显式引用 Record 元素的 Record Patterns。

JDK 20

JDK 20 于 2023 年 3 月 21 日发布。一些新特性如下:

  • JEP 433:Switch 模式匹配
  • JEP 432:Record Patterns
  • JEP 429:作用域值

前提条件

我们将需要遵循本文

按照 Ubuntu 20.04 的初始服务器设置指南进行 20.04 服务器设置,包括一个非 root sudo 用户和防火墙

安装默认 JDK/JRE

安装Java最简单的选择之一是应用 Ubuntu 打包的版本。Ubuntu 的 20.04 版本默认包含OpenJDK11 版本,它是JDKJRE开源版本。

首先,我们需要更新软件包索引以安装此版本。


Install JDK Ubuntu

接下来,查看Java版本是否已安装。


Install JDK Ubuntu

如果当前未安装Java版本,我们将看到以下结果。

我们需要运行以下命令来安装默认的Java Runtime Environment,它将使用OpenJDK 11安装JRE


Install JDK Ubuntu

Java Runtime Environment 将允许我们执行几乎所有 Java 软件。

我们可以使用以下命令验证安装。

我们将找到类似以下的结果

Install JDK Ubuntu

除了Java Runtime Environment之外,我们可能还需要Java Development Kit来编译和运行一些特定的Java 应用程序。我们需要运行以下命令来安装JDK,它也会安装JRE


Install JDK Ubuntu

我们需要通过检查Java 编译器 javac版本来验证JDK是否已成功安装。


Install JDK Ubuntu

我们将看到以下结果

接下来,让我们看看如何安装 Oracle 的官方 JDK 和 JRE。

安装 Oracle JDK 11

Oracle关于 Java 的许可协议不允许从包管理器自动安装。我们应该创建一个Oracle账户并手动下载JDK,然后添加任何新的包存储库以用于我们要安装Oracle Java Development Kit的版本,这是Oracle共享的官方版本。然后,我们可以使用apt通过第三方安装脚本来安装它。

我们需要安装的与 Oracle 的JDK版本安装脚本的版本必须匹配。我们应该访问一个页面,即'oracle-java11-installer',以了解我们需要哪个版本。

此页面上的脚本版本是11.0.7。在这种情况下,我们需要Oracle JDK11.0.7版本。我们的版本号可能会因安装软件的时间而异。我们很快就会通过 apt 下载安装脚本,因此无需从此页面安装任何内容。

然后,我们需要检查下载页面,然后找到与我们所需版本匹配的版本。

  • 点击'JDK Download'按钮,我们将跳转到一个显示可用版本的屏幕。
  • 对于 Linux,点击'.tar.gz'包。
    我们将看到一个屏幕提示我们接受 Oracle 的许可协议。
  • 选择复选框接受此许可协议,然后点击Download按钮。
  • 我们的下载将开始。
  • 在下载开始之前,我们可能需要多次登录我们的Oracle 账户
  • 文件下载完成后,我们需要将其发送到我们的服务器。我们将把这个文件上传到我们的服务器上。
  • 在 Windows、Linux 或 macOS 上,使用Windows Subsystem for Linux,我们将应用命令'scp'将文件传输到我们的 Samy 用户主目录。
  • 下面的命令假设我们将 Oracle 的JDK文件保存在我们本地计算机的Downloads文件夹中。

文件上传过程完成后,我们将返回到服务器并添加一个第三方存储库,该存储库将支持我们安装 Oracle 的 Java。我们将安装一个包'software-properties-common',它将向我们的系统添加一个命令'add-apt-repository'


Install JDK Ubuntu

接下来,我们将导入一个签名密钥,该密钥用于验证我们将要安装的软件


Install JDK Ubuntu

我们将看到以下输出

然后,我们将使用命令'add-apt-repository'将存储库添加到我们的软件包源列表中


Install JDK Ubuntu

我们将看到以下消息

我们需要按enter键继续安装过程。我们可能会找到一条关于'no valid OpenPGP data found'的消息,但我们可以安全地忽略此消息。

我们将使用以下命令更新软件包列表,以便新软件可用于安装过程


Install JDK Ubuntu

安装程序会查找我们下载的Oracle JDK/var/cache/oracle-jdk11-installer-local目录中。我们将创建此目录并将Oracle JDK的存档转移到那里。


Install JDK Ubuntu

最后,我们将使用以下命令安装我们的软件包


Install JDK Ubuntu

首先,安装程序将要求我们接受 Oracle 的许可协议。我们将接受该协议,安装程序将提取 Java 包并进行安装。

现在,我们将了解如何选择要使用的 Java 版本。

Java 管理

我们可以在一台服务器上安装多个 Java 版本。我们可以使用命令'update-alternatives'来配置哪个版本是终端上应用的默认版本。该命令如下所示


Install JDK Ubuntu

如果我们已安装本文中的两个 Java 版本,则结果将如下所示。

选择与要设为默认值的 Java 版本对应的数字,或按Enter键以保留当前设置。

我们可以对其他 Java 命令(如javac编译器)执行此操作。该命令如下所示

此命令可以执行的许多其他命令包括但不限于:keytool、jarsignerjavadoc

设置 JAVA_HOME 环境变量

许多用 Java 语言编写的程序使用环境变量JAVA_HOME来确定 Java 的安装位置。

首先,我们需要确定Java 版本安装在哪里来设置环境变量。

我们将使用以下命令


Install JDK Ubuntu

此命令将显示所有 Java 安装及其安装路径。

在这种情况下,安装路径如下

  1. OpenJDK 11位于/usr/lib/jvm/java-11-openjdk-amd64/bin/java目录。
  2. Oracle Java位于/usr/lib/jvm/java-11-oracle/jre/bin/java目录。

我们需要使用首选的安装程序复制路径。之后,我们将使用nano文本编辑器或其他文本编辑器打开/etc/environment目录。

我们将在此文件末尾添加以下行。请确保将突出显示的路径替换为复制的路径,但不要添加bin/的部分。

我们将修改此文件,它将为我们系统上的每个用户设置JAVA_HOME路径。

我们将保存此文件并退出文本编辑器。

现在,我们将重新加载文件以将修改应用于当前会话

我们将使用以下命令验证此环境变量是否已设置

我们将找到刚刚设置的路径。

许多其他用户需要运行source /etc/environment命令或注销再重新登录才能使用此设置。


下一主题#