如何在 Ubuntu 22.04 上用 Apt 安装 Java

介绍

Java和JVM(Java的虚拟机)需要许多类型的软件,包括 Tomcat, Jetty, Glassfish, CassandraJenkins

在本指南中,您将使用apt安装各种版本的Java Runtime Environment(JRE)和Java Developer Kit(JDK)。您将安装OpenJDK以及来自Oracle的官方JDK。

前提条件

要遵循本教程,您将需要:

第1步:安装Java

一个Java安装有两个主要组件。JDK提供了在Java中开发的必不可少的软件工具,如编译器和调试器。JRE被用来实际执行Java程序。此外,有两个主要的Java安装选项可供选择。OpenJDK是Java的开源实现,并附带Ubuntu。Oracle JDK是Java的原始版本,由Java的开发者Oracle完全维护。

这两种版本都是由Oracle正式认可的,两者都是由Oracle开发的,但OpenJDK由于其开源性质而增加了社区贡献,然而,从Java 11开始,两种选项现在在功能上是相同的(正如Oracle详细描述的那样)(https://blogs.oracle.com/java/post/oracle-jdk-releases-for-java-11-and-later)。安装之间的选择取决于为您的情况选择合适的许可证。此外,OpenJDK有选择单独安装JRE,而OracleJDK则配有JRE。

选项 1 — 安装默认 JRE/JDK

安装Java的一个选项是使用与Ubuntu组成的版本,默认情况下,Ubuntu 22.04包含Open JDK 11,这是JRE和JDK的开源版本。

要安装Java的OpenJDK版本,先更新您的apt包索引:

1sudo apt update

接下来,检查是否已经安装了Java:

1java -version

如果Java目前尚未安装,您将收到以下输出:

1[secondary_label Output]
2Command 'java' not found, but can be installed with:
3
4sudo apt install default-jre              # version 2:1.11-72build1, or
5sudo apt install openjdk-11-jre-headless  # version 11.0.14+9-0ubuntu2
6sudo apt install openjdk-17-jre-headless  # version 17.0.2+8-1
7sudo apt install openjdk-18-jre-headless  # version 18~36ea-1
8sudo apt install openjdk-8-jre-headless   # version 8u312-b07-0ubuntu1

執行以下命令來從 OpenJDK 11 安裝 JRE:

1sudo apt install default-jre

JRE将允许您运行几乎所有Java软件。

检查安装与:

1java -version

您将收到类似于以下的输出:

1[secondary_label Output]
2openjdk version "11.0.14" 2022-01-18
3OpenJDK Runtime Environment (build 11.0.14+9-Ubuntu-0ubuntu2)
4OpenJDK 64-Bit Server VM (build 11.0.14+9-Ubuntu-0ubuntu2, mixed mode, sharing)

除了 JRE 之外,您可能还需要 JDK 来编译和运行某些特定的基于 Java 的软件. 要安装 JDK,请执行以下命令,该命令还会安装 JRE:

1sudo apt install default-jdk

通过检查 Java 编译器「javac」的版本来验证 JDK 是否已安装:

1javac -version

您将看到以下输出:

1[secondary_label Output]
2javac 11.0.14

接下来,您将学习如何安装Oracle的官方JDK和JRE。

选项 2 — 安装 Oracle JDK 11

Oracle 的 Java 许可协议不允许通过包管理器进行自动安装. 要安装 Oracle JDK,这是 Oracle 发行的官方版本,您必须 创建 Oracle 帐户并手动下载 JDK 以添加您想要使用的版本的新包库。

您需要下载的 Oracle JDK 版本必须与安装程序脚本的版本匹配. 要查找您需要的版本,请访问 oracle-java11-installer页面。

查找 Jammy 的包,如下图所示:

Installer package for Ubuntu 22.04

在此图像中,脚本的版本是 11.0.13. 在这种情况下,你需要 Oracle JDK 11.0.13. 你的版本号可能因你安装软件时而有所不同。

您不需要从此页面下载任何东西;您将很快通过apt下载安装脚本。

接下来,访问 档案下载并找到匹配您需要的版本的版本。

The Oracle Java archive downloads web page where you can find versions of Java that are not the latest release.

从此列表中,选择 Linux x64 压缩档案 .tar.gz 包:

Linux download

您将看到一个屏幕,要求您接受 Oracle 许可协议。 选择验证框来接受许可协议,然后按下 Download 按钮。 您的下载将开始。

一旦下载了该文件,您将需要将其传输到您的服务器上。在本地计算机上,将该文件上传到您的服务器上。在 macOS、Linux 或 Windows 上使用 Windows 子系统 for Linux,使用scp命令将该文件传输到您的sammy用户的主目录。下列命令假定您已将 Oracle JDK 文件保存到本地计算机的下载文件夹:

1[environment local]
2scp Downloads/jdk-11.0.13_linux-x64_bin.tar.gz sammy@your_server_ip:~

完成文件上传后,返回您的服务器并添加第三方存储库,以帮助您安装Oracle的Java。

首先,导入用于验证你要安装的软件的签名密钥:

1sudo gpg --homedir /tmp --no-default-keyring --keyring /usr/share/keyrings/oracle-jdk11-installer.gpg --keyserver keyserver.ubuntu.com --recv-keys EA8CACC073C3DB2A

你会看到这个输出:

1[secondary_label Output]
2gpg: keybox '/usr/share/keyrings/oracle-jdk11-installer.gpg' created
3gpg: /tmp/trustdb.gpg: trustdb created
4gpg: key EA8CACC073C3DB2A: public key "Launchpad PPA for Linux Uprising" imported
5gpg: Total number processed: 1
6gpg:               imported: 1

接下来,将存储库添加到您的包源列表:

1echo "deb [arch=amd64 signed-by=/usr/share/keyrings/oracle-jdk11-installer.gpg] https://ppa.launchpadcontent.net/linuxuprising/java/ubuntu jammy main" | sudo tee /etc/apt/sources.list.d/oracle-jdk11-installer.list > /dev/null

更新您的包列表以使新软件可供安装:

1sudo apt update

安装程序将搜索您下载的 Oracle JDK 在 /var/cache/oracle-jdk11-installer-local. 创建此目录并将 Oracle JDK 档案移动到那里:

1sudo mkdir -p /var/cache/oracle-jdk11-installer-local/
2sudo cp jdk-11.0.13_linux-x64_bin.tar.gz /var/cache/oracle-jdk11-installer-local/

最后,安装该包:

1sudo apt install oracle-java11-installer-local

安装程序将首先要求您接受 Oracle 许可协议. 接受协议,然后安装程序将提取 Java 包并安装它。

现在你将看看如何选择你想要使用的Java版本。

第2步:管理Java

您可以在一个服务器上进行多个Java安装,您可以使用更新替代命令来配置哪个版本是命令行上使用的默认版本。

1sudo update-alternatives --config java

如果您在本教程中安装了两个版本的Java,输出将是这样的:

 1[secondary_label Output]
 2There are 2 choices for the alternative java (providing /usr/bin/java).
 3
 4  Selection Path Priority Status
 5------------------------------------------------------------
 6  0            /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1111 auto mode
 7  1            /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1111 manual mode
 8* 2            /usr/lib/jvm/java-11-oracle/bin/java 1091 manual mode
 9
10Press <enter> to keep the current choice[*], or type selection number:

选择与 Java 版本相关的号码以作为默认使用,或按ENTER,留下当前设置。

对于其他Java命令,例如编译器(‘javac’)可以这样做:

1sudo update-alternatives --config javac

可以执行此命令的其他命令包括但不限于:‘keytool’,‘javadoc’和‘jarsigner’.

步骤 3 — 设置JAVA_HOME环境变量

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

要设置此环境变量,请先确定 Java 安装在何处。

1sudo update-alternatives --config java

这个命令显示了Java的每个安装以及其安装路径:

 1[secondary_label Output]
 2There are 2 choices for the alternative java (providing /usr/bin/java).
 3
 4  Selection Path Priority Status
 5------------------------------------------------------------
 6  0            /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1111 auto mode
 7  1            /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1111 manual mode
 8* 2            /usr/lib/jvm/java-11-oracle/bin/java 1091 manual mode
 9
10Press <enter> to keep the current choice[*], or type selection number:

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

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」:

1sudo nano /etc/environment

在此文件的末尾,添加下列行,确保用自己的复制路径取代突出路径,而不包括路径的bin/部分:

1[label /etc/environment]
2JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64"

修改此文件将为您的系统上的所有用户设置JAVA_HOME路径。

保存文件并离开编辑器。

现在重新加载此文件以将更改应用到当前会话中:

1source /etc/environment

检查环境变量是否已设置:

1echo $JAVA_HOME

你会看到你刚刚设置的路径:

1[secondary_label Output]
2/usr/lib/jvm/java-11-openjdk-amd64

其他用户需要执行命令 source /etc/environment 或退出并重新登录以应用此设置。

结论

在本教程中,您安装了多个版本的Java,并学会了如何管理它们,现在您可以安装运行在Java上的软件,如Tomcat,Jetty,Glassfish,Cassandra或Jenkins。

Published At
Categories with 技术
comments powered by Disqus