Introduction
This tutorial will show you how to install Java on current versions of RPM-based Linux distributions: Red Hat Enterprise Linux, CentOS, Fedora, and Rocky Linux. Java is a popular programming language and software platform that allows you to run many server-side applications.
This tutorial covers installing the latest, default version of Java, as well as cherry-picking any older versions for installation, and switching between multiple versions in your environment as needed.
Prerequisites
Before you begin this guide, you should have a regular, non-root user with sudo
privileges configured on your server – this is the user that you should log in to your server as. You can learn how to configure a regular user account by following the steps in our initial server setup guide for Rocky Linux 8.
Step 1 – Installing OpenJDK
There are three different editions of the Java Platform: Standard Edition (SE), Enterprise Edition (EE), and Micro Edition (ME). This tutorial is focused on Java SE (Java Platform, Standard Edition). Almost all open source Java software is designed to run with Java SE.
There are two different Java SE packages that can be installed: the Java Runtime Environment (JRE) and the Java Development Kit (JDK). JRE is an implementation of the Java Virtual Machine (JVM), which allows you to run compiled Java applications and applets. The JDK includes the JRE as well as other software that is required for writing, developing, and compiling Java applications and applets.
There are also two different implementations of Java: OpenJDK and Oracle Java. Both implementations are based largely on the same code but OpenJDK, the reference implementation of Java, is fully open source while Oracle Java contains some proprietary code. Most Java applications will work fine with either but you should use whichever implementation your software calls for.
You may install various versions and releases of Java on a single system, but most people only need one installation. With that in mind, try to only install the version of Java that you need to run or develop your application(s).
This section will show you how to install the prebuilt OpenJDK JRE and JDK packages using the yum
package manager. yum
is the default package manager for distributions that use RPM packages.
To install the OpenJDK using yum, you can run sudo yum install java
:
sudo yum install java
By default, trying to install java
without specifying a version will resolve to the most common stable version of the OpenJDK JRE. As you can see from this output, as of this writing, that is java-1.8.0-openjdk
:
Last metadata expiration check: 0:02:38 ago on Tue 22 Feb 2022 04:57:59 PM UTC.
Dependencies resolved.
========================================================================================
Package Arch Version Repo Size
========================================================================================
Installing:
java-1.8.0-openjdk x86_64 1:1.8.0.322.b06-2.el8_5 appstream 341 k
Installing dependencies:
alsa-lib x86_64 1.2.5-4.el8 appstream 488 k
atk x86_64 2.28.1-1.el8 appstream 270 k
avahi-libs x86_64 0.7-20.el8 baseos 61 k
copy-jdk-configs noarch 4.0-2.el8 appstream 29 k
cups-libs x86_64 1:2.2.6-40.el8 baseos 432 k
fribidi x86_64 1.0.4-8.el8 appstream 88 k
…
Multiple dependencies will also be provided along with Java. At the confirmation prompt, enter y
then press Enter to continue with the installation. You may also be prompted to accept signing keys for the repositories you are installing from:
Importing GPG key 0x6D745A60:
Userid : "Release Engineering <infrastructure@rockylinux.org>"
Fingerprint: 7051 C470 A929 F454 CEBE 37B7 15AF 5DAC 6D74 5A60
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial
Is this ok [y/N]:
Enter y
then press Enter again.
You should now have a working Java installation. In order to confirm this, you can run java -version
, to check the version of Java that is now available in your environment:
java -version
Note: Most of the time, command-line arguments are preceded by one dash for single-letter arguments, or two dashes for full-word arguments. Java follows a different convention of using one dash for all arguments, in this case, -version
.
openjdk version "1.8.0_322"
OpenJDK Runtime Environment (build 1.8.0_322-b06)
OpenJDK 64-Bit Server VM (build 25.322-b06, mixed mode)
The interactions between Java naming conventions and Linux package naming conventions can be somewhat confusing. Earlier in this tutorial, we clarified the difference between the full JDK environment for development, and the JRE environment for running Java applications. Although OpenJDK is the name of the open source distribution of Java, you have only actually installed the OpenJDK JRE. In order to install the full OpenJDK JDK, you should install the corresponding package with -devel
appended onto its name. This is a common convention for development packages for other programming environments, which Java also follows, although the terminology overlaps awkwardly here.
As before, you can install java-devel
to get the default version, or specify java-1.8.0-openjdk-devel
:
sudo yum install java-devel
DigitalOcean Droplet Agent 63 kB/s | 3.3 kB 00:00
Dependencies resolved.
========================================================================================
Package Arch Version Repository Size
========================================================================================
Installing:
java-1.8.0-openjdk-devel x86_64 1:1.8.0.322.b06-2.el8_5 appstream 9.8 M
Transaction Summary
========================================================================================
Install 1 Package
Total download size: 9.8 M
Installed size: 41 M
Is this ok [y/N]:
After installing this package, you should have a full OpenJDK environment which can compile and run any Java software that does not have specific version incompatibilities. In the next section, you’ll install and manage other versions of Java.
Step 2 – Installing Other OpenJDK Releases
More recently, OpenJDK changed its version numbering scheme to track more closely with Oracle Java releases. In order to install a newer version of OpenJDK, you can specify the version number in the package name, just like with 1.8.0
. For example, in order to install OpenJDK 17, you can yum install java-17-openjdk
:
sudo yum install java-17-openjdk
Last metadata expiration check: 0:03:36 ago on Tue 22 Feb 2022 05:42:44 PM UTC.
Dependencies resolved.
========================================================================================
Package Arch Version Repository Size
========================================================================================
Installing:
java-17-openjdk x86_64 1:17.0.2.0.8-4.el8_5 appstream 244 k
Installing dependencies:
adwaita-cursor-theme noarch 3.28.0-2.el8 appstream 646 k
adwaita-icon-theme noarch 3.28.0-2.el8 appstream 11 M
at-spi2-atk x86_64 2.26.2-1.el8 appstream 88 k
at-spi2-core x86_64 2.28.0-1.el8 appstream 168 k
colord-libs x86_64 1.4.2-1.el8 appstream 234 k
java-17-openjdk-headless x86_64 1:17.0.2.0.8-4.el8_5 appstream 41 M
lcms2 x86_64 2.9-2.el8 appstream 163 k
…
As before, you can install the full JDK environment by appending -devel
to the package name. However, after this, running java
programs will still use the OpenJDK 1.8.0 version that you installed earlier by default, which you can confirm by running java -version
again:
java -version
openjdk version "1.8.0_322"
OpenJDK Runtime Environment (build 1.8.0_322-b06)
OpenJDK 64-Bit Server VM (build 25.322-b06, mixed mode)
In the next step, you’ll manage installed versions of Java.
Step 3 – Setting Your Default Java Version
If you installed multiple versions of Java, you may want to set one as your default (i.e. the one that will run when a user runs the java
command). Additionally, some applications require certain environment variables to be set to locate which installation of Java to use.
The alternatives
command, which manages default commands through symbolic links, can be used to select the default Java version. To list the available versions of Java that can be managed by alternatives
, use alternatives –config java
:
sudo alternatives --config java
The output should list both versions of Java that you’ve installed:
outputThere are 2 programs which provide 'java'.
Selection Command
-----------------------------------------------
*+ 1 java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-2.el8_5.x86_64/jre/bin/java)
2 java-17-openjdk.x86_64 (/usr/lib/jvm/java-17-openjdk-17.0.2.0.8-4.el8_5.x86_64/bin/java)
Enter to keep the current selection[+], or type selection number:
Enter the a selection number to choose which java
executable should be used by default. It will rearrange the necessary symbolic links on your system to ensure that the java
command points to the correct set of libraries. You can re-run this command as needed, and the output of java -version
should change accordingly:
java -version
openjdk version "17.0.2" 2022-01-18 LTS
OpenJDK Runtime Environment 21.9 (build 17.0.2+8-LTS)
OpenJDK 64-Bit Server VM 21.9 (build 17.0.2+8-LTS, mixed mode, sharing)
Many Java applications also use the JAVA_HOME
or JRE_HOME
environment variables to determine which java
executable to use.
For example, if you installed Java to (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-2.el8_5.x86_64/jre/bin
(i.e. your java
executable is located at <^>(/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-2.el8_5.x86_64/jre/bin/java
), you could set your JAVA_HOME
environment variable in a bash shell or script like so:
export JAVA_HOME=(/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-2.el8_5.x86_64/jre
Note: The JAVA_HOME
environment variable prefers that you set the path to your Java installation ending in the /jre
directory. This convention can change from one variable to the next, so it’s best to carefully check examples when making changes.
If you want JAVA_HOME
to be set for every user on the system by default, add the previous line to the /etc/environment
file. You can append it to the file using echo
and >>
shell redirection, in order to avoid having to edit the /etc/environment
file directly, by running this command:
sudo sh -c "echo export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-2.el8_5.x86_64/jre >> /etc/environment"
In the next step, you’ll install Oracle’s proprietary Java alongside your OpenJDK versions.
Step 4 – Installing Oracle Java
This section of the guide will show you how to install Oracle Java JRE and JDK (64-bit), the latest release of these packages at the time of this writing.
Note:
If you are using the interactive terminal on this page, you will not be able to download and install Oracle Java into the environment.
Throughout this section we will be using the wget
command to download the Oracle Java software packages. wget
may not be included by default on your Linux distribution, so in order to follow along you will need to install it by running:
sudo yum install wget
You must accept the Oracle Binary Code License Agreement for Java SE, which is one of the included steps, before installing Oracle Java.
Note: In order to install Oracle Java, you will need to go to the Oracle Java Downloads Page, accept the license agreement, and copy the download link of the appropriate Linux x86 .rpm
package. Substitute the copied download link in place of the highlighted part of the wget
command.
Change to your home directory and download the Oracle Java RPM with these commands:
cd ~
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.rpm"
Then install the RPM with yum localinstall
(if you downloaded a different release, substitute the filename here):
sudo yum localinstall jdk-17_linux-x64_bin.rpm
At the confirmation prompt, enter y
then press Enter to continue with the installation.
You may delete the archive file that you downloaded earlier:
rm ~/jdk-17_linux-x64_bin.rpm
You can now re-run the alternatives
command and you should see a third option to use Oracle Java:
sudo alternatives --config java
outputThere are 3 programs which provide 'java'.
Selection Command
-----------------------------------------------
1 java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-2.el8_5.x86_64/jre/bin/java)
+ 2 java-17-openjdk.x86_64 (/usr/lib/jvm/java-17-openjdk-17.0.2.0.8-4.el8_5.x86_64/bin/java)
* 3 /usr/java/jdk-17.0.2/bin/java
Enter to keep the current selection[+], or type selection number:
The steps in this tutorial should be sufficient in order to install and run any available version of Java depending on your use case.
Conclusion
In this tutorial, you installed and managed multiple versions of Java using the yum
package manager, the alternatives
command, and environment variables. These are all fundamental aspects of Linux environment management, and Java provides an especially good example of working with them because of its many different versions.
Next, you may want to learn how to use Java in other contexts.