Skip to main content

如何用Apt在22.04版本Ubuntu中安装Java

作者 Brian Hogan, Tony Tran

导语

许多诸如Tomcat, Jetty, Glassfish, Cassandra和Jenkins的软件都需要用到Java与JVM(Java虚拟机)。本教程会介绍如何安装不同版本的Java运行环境(JRE)和Java开发工具包(JDK),包括OpenJDK和Oracle上的官方JDK,安装版本可按照项目需求改变。安装完成后,就可以使用JDK开发软件,或是用JRE运行软件了。

前期准备

本教程需要:

  • 已搭建完成的22.04版本Ubuntu服务器,需带有sudo非root用户权限和防火墙。

第一步:安装Java

安装Java主要包含两部分。JDK提供使用Java开发软件的核心工具,例如编译器与调试器。JRE则用来实际运行Java程序。此外,有两个安装选项可供选择:开源的OpenJDK,与Ubuntu一起打包,以及Java的原始版本Oracle JDK,完全由Java的开发者Oracle维护。

Oracle官方认可全部两个选择。二者都由Oracle开发,但OpenJDK因开源而对社区更有贡献。然而官方详细说明了从Java 11开始,这二者在功能上是相同的。安装哪一个应视个人情况选择。此外,OpenJDK的安装可以与JRE的安装分开,而OracleJDK则与它的JRE打包在一起。

选项一:安装默认JRE/JDK

安装Java最简单的选项就是使用与Ubuntu打包的版本。22.04版本的Ubuntu默认包含Open JDK 11,它是JRE与JDK的开源变体。

要安装这个版本,首先更新包索引:

$ sudo apt update

然后,检查Java是否已经安装:

$ java -version

如果还没有,则会输出以下代码:

Output

Command 'java' not found, but can be installed with:

sudo apt install default-jre # version 2:1.11-72build1, or
sudo apt install openjdk-11-jre-headless # version 11.0.14+9-0ubuntu2
sudo apt install openjdk-17-jre-headless # version 17.0.2+8-1
sudo apt install openjdk-18-jre-headless # version 18~36ea-1
sudo apt install openjdk-8-jre-headless # version 8u312-b07-0ubuntu1

执行以下命令即可安装默认的JRE,也就是OpenJDK 11的JRE:

$ sudo apt install default-jre

有了JRE,就可以运行几乎所有Java软件。

用此命令验证是否安装完成:

$ java -version

如果已完成,输出会与以下类似:

Output

openjdk version "11.0.14" 2022-01-18
OpenJDK Runtime Environment (build 11.0.14+9-Ubuntu-0ubuntu2)
OpenJDK 64-Bit Server VM (build 11.0.14+9-Ubuntu-0ubuntu2, mixed mode, sharing)

除了JRE之外,为了运行一些特定的基于Java的软件,可能还需用到Java开发工具包(JDK)。如果要同时安装JDK和JRE,运行以下命令:

$ sudo apt install default-jdk

检查 javac,也就是Java编译器的版本,来验证JDK是否成功安装:

$ javac -version

输出如下:

Output

javac 11.0.14

随后,本教程将会介绍如何安装Oracle官方JDK和JRE。

选项二:安装Oracle JDK 11

Oracle的Java许可协议不允许通过包管理器进行自动安装。为了安装Oracle的官方JDK,必须创建一个Oracle账号,选择需要的版本,再手动添加这个版本的新存储包。然后才可以用apt在第三方脚本的帮助下安装。Oracle JDK已包含JRE,因此无需再单独安装。

准备下载的Oracle JDK的版本必须与安装程序脚本的版本相符。访问https://launchpad.net/~linuxuprising/+archive/ubuntu/java/+packages 页面,来找到需要的版本。在页面中找到Jammy包。你可能会看到脚本的版本是11.0.13。这种情况下就需要安装Oracle JDK的11.0.13版本。版本号可能随安装时间变化。你无需从这个页面下载任何东西,而是将很快通过apt下载安装脚本。

随后访问Java的官方下载页面,找到你需要的版本。如果想要的版本并非最新版本,可以转至档案库页面查找该版本。找到想要的版本后,点击给Linux的 .tar.gz 包。随后,会出现一个页面,需要你同意Oracle的协议。选择接受,然后再按下下载键。下载就会开始。在下载开始前,可能还需要你登录一次Oracle的账号。

下载结束后,就需要将文件转到服务器中。要从本地计算机中,将文件上传到服务器内。如果使用的是macOS系统、Linux系统或以Linux为辅系统的Window系统,可以用 scp 命令将文件传输至 sammy 用户的主目录中。以下命令以Oracle JDK安装在本地机器的 Downloads 文件夹为例:

$ scp Downloads/jdk-11.0.13_linux-x64_bin.tar.gz sammy@your_server_ip:~

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

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

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

输出如下:

Output

gpg: keybox '/usr/share/keyrings/oracle-jdk11-installer.gpg' created
gpg: /tmp/trustdb.gpg: trustdb created
gpg: key EA8CACC073C3DB2A: public key "Launchpad PPA for Linux Uprising" imported
gpg: Total number processed: 1
gpg: imported: 1

随后,将存储库添加至包源列表中:

$ echo "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

更新包源列表,使新软件的安装可以进行:

$ sudo apt update

安装程序会在 /var/cache/oracle-jdk11-installer-local 目录中搜寻刚刚下载的Oracle JDK。因此,创建以下目录,并将Oracle JDK的存档移到这个目录中:

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

最后,安装整个包:

$ sudo apt install oracle-java11-installer-local

安装程序会需要你接受Oracle的协议。接受协议后,安装程序就会提取Java包并开始安装。

下一步将会介绍如何选择要使用的Java版本。

第二步:管理Java

一个服务器中可以安装多个Java。通过用 update-alternatives 命令来配置服务器可以改变服务器默认的Java版本。

$ sudo update-alternatives --config java

如果安装了本教程之前提到的两种版本的Java,结果就会如下:

Output

There are 2 choices for the alternative java (providing /usr/bin/java).

Selection Path Priority Status
------------------------------------------------------------
0 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1111 auto mode
1 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1111 manual mode
* 2 /usr/lib/jvm/java-11-oracle/bin/java 1091 manual mode

Press <enter> to keep the current choice[*], or type selection number:

可以选择与Java版本关联的数字,将其用作默认值,或按 ENTER 键保留当前设置。

也可以对Java的其它部分执行类似命令,例如对编译器(javac):

$ sudo update-alternatives --config javac

用来对其它部分运行类似命令的命令,包括但不限于:keytooljavadocjarsigner

第三步:设置 JAVA_HOME 环境变量

许多用Java写的程序都会用 JAVA_HOME 环境变量决定Java安装的位置。

要设置这个环境变量,第一步是找到Java的安装位置。用 update-alternatives 命令:

$ sudo update-alternatives --config java

这条命令会输出所有Java的安装目录:

Output

There are 2 choices for the alternative java (providing /usr/bin/java).

Selection Path Priority Status
------------------------------------------------------------
0 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1111 auto mode
1 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1111 manual mode
* 2 /usr/lib/jvm/java-11-oracle/bin/java 1091 manual mode

Press <enter> to keep the current choice[*], or type selection number:

在这个例子中,安装目录为:

  • OpenJDK安装在 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 路径下
  • Oracle Java安装在 /usr/lib/jvm/java-11-oracle/jre/bin/java 路径下

选一个更想要的路径,然后打开 nano,或者别的编辑器,用以下代码来打开 /etc/environment

$ sudo nano /etc/environment

在文件的结尾加上下面这行。记得确保用真实路径代替例子中的路径,而且删去路径中的 bin/ 部分:

JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64"

改动这个文档就会改动所有系统用户对的 JAVA_HOME 环境变量。

保存文件并退出编辑器。然后重载文件,使刚刚的改动生效:

$ source /etc/environment

验证改动已经生效:

$ echo $JAVA_HOME

刚刚设置的新路径就会显示:

Output

/usr/lib/jvm/java-11-openjdk-amd64

而其他用户需要运行 source /etc/environment 命令或重新登录来应用新设定。

结语

本教程介绍了如何安装不同版本的Java已经如何管理它们。Java安装完毕后,就可以运行诸如Tomecat, Jetty, Glassfish, Cassandra和Jenkins等需要Java才能运行的软件了。