如何用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
用来对其它部分运行类似命令的命令,包括但不限于:keytool
,javadoc
和 jarsigner
。
第三步:设置 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才能运行的软件了。