
There are different vendors that provide Java, such as
- Oracle Java (this is typically what people think of when then think of Java)
- OpenJDK
- Adopt OpenJDK (adoptium)
- IBM Java
- and the list goes on
And there are different "types" of Java, such as
- Java Runtime Environment (JRE)
- Java Development Toolkit (JDK)
Each flavor of Java has it's own installation process.
Oracle Java
- Go to https://www.java.com.
- Select Download.
- Select See all Java downloads.
- Under Linux, select one of the download options, such as RPM or tar.gz.
If you downloaded the RPM (Red Hat Package Manager) file, on a Red Hat distibution (CentOS, Fedora, Red Hat), the rpm install command can be used to install Oracle Java. By default, this should install Oracle Java at /usr/bin/java.
~]# rpm -ivh /tmp/jre-<version>-linux.rpm
If the /usr/lib/jvm directory does not exist, create the /usr/lib/jvm directory.
mkdir /usr/lib/jvm
Use the tar --extract command to extract the tar archive to the /usr/lib/jvm directory.
tar --extract --gunzip --preserve-permissions --file jre-<version>-linux-i586.tar.gz --directory /usr/lib/jvm
Create a symbolic link between the "jre" command in the extracted directory (e.g. /usr/lib/jvm/jre-<version>-linux-i586/jre) and /etc/alternatives.
ln -s /usr/lib/jvm/OpenJDK17U-jdk_x64_linux_hotspot_<version>/jre /etc/alternatives/oracle_java_<version>_jre
Create a symbolic link between /usr/bin/java and /etc/alternatives/oracle_java_<version>_jre. This will make it so that the "java" command points to /etc/alternatives/oracle_java_<version>_jre which in turn points to the "jre" command in the extracted directory (e.g. /usr/lib/jvm/re-<version>-linux-i586/jre).
ln -s /etc/alternatives/oracle_java_<version>_jre /usr/bin/java
OpenJDK
On a Debian system (Mint, Ubuntu), the apt-get install command can be used to install OpenJDK Java Runtime Environment (JRE) or Java Development Toolkit (JDK).
apt-get install openjdk-8-jre
On a Red Hat distribution (CentOS, Fedora, Red Hat), the dnf install or yum install command can be used to install OpenJDK Java Runtime Environment (JRE) or Java Development Toolkit (JDK).
dnf install java-1.8.0-openjdk
If you are reading this, you probably also want the devel package as it contains developer commands such as javac so you can compile a java app.
dnf install java-1.8.0-openjdk-devel
Adoptium OpenJDK
- Go to https://www.adoptium.net/temurin/releases.
- Download the Linux x86 jre (Java Runtime Environment) or jdk (Java Development Kit) TAR (e.g. OpenJDK21U-jdk_ppc64_aix_hotspot_21.0.4_7.tar.gz)
If the /usr/lib/jvm directory does not exist, create the /usr/lib/jvm directory.
mkdir /usr/lib/jvm
Almost always, the /usr/lib/jvm directory will be owned by root.
chown root /usr/lib/jvm
chgrp root /usr/lib/jvm
Use the tar --extract command to extract the tar archive to the /usr/lib/jvm directory.
tar -zxpf OpenJDK21U-jdk_ppc64_aix_hotspot_21.0.4_7.tar.gz --directory /usr/lib/jvm
At this point, you can use the full command to the CLIs in the bin directory.
~]# /usr/lib/jvm/adoptopenjdk-21.0.4.7/jdk-21.0.4+7/bin/java -version
openjdk version "21.0.4" 2024-07-16 LTS
OpenJDK Runtime Environment Temurin-21.0.4+7 (build 21.0.4+7-LTS)
OpenJDK 64-Bit Server VM Temurin-21.0.4+7 (build 21.0.4+7-LTS, mixed mode, sharing)
If you want certain commands such as "java" or "jre" to point to the CLIs in the bin directory, the ln command can be used to create a symbolic link.
ln -s /usr/lib/jvm/adoptopenjdk-21.0.4.7/jdk-21.0.4+7/bin/java /usr/bin/java
DNF / YUM
On a Red Hat Linux system (CentOS, Fedora, Red Hat), the dnf list installed or yum list installed command can be used to determine if any version of Java are installed via dnf or yum.
~]# dnf list installed | egrep -i 'java|jdk'
MQSeriesJava.x86_64 8.0.0-5 @System
copy-jdk-configs.noarch 4.0-3.el9 @System
java-1.8.0-openjdk.x86_64 1:1.8.0.422.b05-2.el9 @rhel-9-for-x86_64-appstream-rpms
java-1.8.0-openjdk-headless.x86_64 1:1.8.0.422.b05-2.el9 @rhel-9-for-x86_64-appstream-rpms
java-11-openjdk-headless.x86_64 1:11.0.24.0.8-2.el9 @rhel-9-for-x86_64-appstream-rpms
javapackages-filesystem.noarch 6.0.0-4.el9 @System
javapackages-tools.noarch 6.0.0-4.el9 @System
tzdata-java.noarch 2024a-1.el9 @rhel-9-for-x86_64-appstream-rpms
And the dnf list available or yum list available commands can be used to list the versions of Java that can be installed via dnf or yum.
~]# dnf list available | egrep -i 'java|jdk'
ant-javamail.noarch 1.10.9-7.el9 rhel-9-for-x86_64-appstream-rpms
byteman-javadoc.noarch 4.0.16-2.el9 rhel-9-for-x86_64-appstream-rpms
idm-ldapjdk.noarch 5.5.0-1.el9 rhel-9-for-x86_64-appstream-rpms
idm-pki-java.noarch 11.5.0-2.el9_4 rhel-9-for-x86_64-appstream-rpms
java-1.8.0-openjdk-demo.x86_64 1:1.8.0.422.b05-2.el9 rhel-9-for-x86_64-appstream-rpms
java-1.8.0-openjdk-devel.x86_64 1:1.8.0.422.b05-2.el9 rhel-9-for-x86_64-appstream-rpms
java-1.8.0-openjdk-javadoc.noarch 1:1.8.0.422.b05-2.el9 rhel-9-for-x86_64-appstream-rpms
java-1.8.0-openjdk-javadoc-zip.noarch 1:1.8.0.422.b05-2.el9 rhel-9-for-x86_64-appstream-rpms
java-1.8.0-openjdk-src.x86_64 1:1.8.0.422.b05-2.el9 rhel-9-for-x86_64-appstream-rpms
java-11-openjdk.x86_64 1:11.0.24.0.8-2.el9 rhel-9-for-x86_64-appstream-rpms
java-11-openjdk-demo.x86_64 1:11.0.24.0.8-2.el9 rhel-9-for-x86_64-appstream-rpms
java-11-openjdk-devel.x86_64 1:11.0.24.0.8-2.el9 rhel-9-for-x86_64-appstream-rpms
java-11-openjdk-javadoc.x86_64 1:11.0.24.0.8-2.el9 rhel-9-for-x86_64-appstream-rpms
java-11-openjdk-javadoc-zip.x86_64 1:11.0.24.0.8-2.el9 rhel-9-for-x86_64-appstream-rpms
java-11-openjdk-jmods.x86_64 1:11.0.24.0.8-2.el9 rhel-9-for-x86_64-appstream-rpms
java-11-openjdk-src.x86_64 1:11.0.24.0.8-2.el9 rhel-9-for-x86_64-appstream-rpms
java-11-openjdk-static-libs.x86_64 1:11.0.24.0.8-2.el9 rhel-9-for-x86_64-appstream-rpms
java-17-openjdk.x86_64 1:17.0.12.0.7-2.el9 rhel-9-for-x86_64-appstream-rpms
java-17-openjdk-demo.x86_64 1:17.0.12.0.7-2.el9 rhel-9-for-x86_64-appstream-rpms
java-17-openjdk-devel.x86_64 1:17.0.12.0.7-2.el9 rhel-9-for-x86_64-appstream-rpms
java-17-openjdk-headless.x86_64 1:17.0.12.0.7-2.el9 rhel-9-for-x86_64-appstream-rpms
java-17-openjdk-javadoc.x86_64 1:17.0.12.0.7-2.el9 rhel-9-for-x86_64-appstream-rpms
java-17-openjdk-javadoc-zip.x86_64 1:17.0.12.0.7-2.el9 rhel-9-for-x86_64-appstream-rpms
java-17-openjdk-jmods.x86_64 1:17.0.12.0.7-2.el9 rhel-9-for-x86_64-appstream-rpms
java-17-openjdk-src.x86_64 1:17.0.12.0.7-2.el9 rhel-9-for-x86_64-appstream-rpms
java-17-openjdk-static-libs.x86_64 1:17.0.12.0.7-2.el9 rhel-9-for-x86_64-appstream-rpms
java-21-openjdk.x86_64 1:21.0.4.0.7-1.el9 rhel-9-for-x86_64-appstream-rpms
java-21-openjdk-demo.x86_64 1:21.0.4.0.7-1.el9 rhel-9-for-x86_64-appstream-rpms
java-21-openjdk-devel.x86_64 1:21.0.4.0.7-1.el9 rhel-9-for-x86_64-appstream-rpms
java-21-openjdk-headless.x86_64 1:21.0.4.0.7-1.el9 rhel-9-for-x86_64-appstream-rpms
java-21-openjdk-javadoc.x86_64 1:21.0.4.0.7-1.el9 rhel-9-for-x86_64-appstream-rpms
java-21-openjdk-javadoc-zip.x86_64 1:21.0.4.0.7-1.el9 rhel-9-for-x86_64-appstream-rpms
java-21-openjdk-jmods.x86_64 1:21.0.4.0.7-1.el9 rhel-9-for-x86_64-appstream-rpms
java-21-openjdk-src.x86_64 1:21.0.4.0.7-1.el9 rhel-9-for-x86_64-appstream-rpms
java-21-openjdk-static-libs.x86_64 1:21.0.4.0.7-1.el9 rhel-9-for-x86_64-appstream-rpms
jigawatts-javadoc.x86_64 1.21.0.0.0-4.el9 rhel-9-for-x86_64-appstream-rpms
ldapjdk.noarch 5.0.0-1.el9 rhel-9-for-x86_64-appstream-rpms
mariadb-java-client.noarch 3.0.3-1.el9 rhel-9-for-x86_64-appstream-rpms
maven-openjdk11.noarch 1:3.6.3-15.el9 rhel-9-for-x86_64-appstream-rpms
maven-openjdk17.noarch 1:3.6.3-15.el9 rhel-9-for-x86_64-appstream-rpms
maven-openjdk8.noarch 1:3.6.3-15.el9 rhel-9-for-x86_64-appstream-rpms
openmpi-java.x86_64 2:4.1.1-7.el9 rhel-9-for-x86_64-appstream-rpms
owasp-java-encoder.noarch 1.2.2-6.el9 rhel-9-for-x86_64-appstream-rpms
pki-base-java.noarch 11.0.6-2.el9_0 rhel-9-for-x86_64-appstream-rpms
slf4j-jdk14.noarch 1.7.30-13.el9 rhel-9-for-x86_64-appstream-rpms
systemtap-runtime-java.x86_64 5.0-4.el9 rhel-9-for-x86_64-appstream-rpms
xz-java.noarch 1.8-14.el9 rhel-9-for-x86_64-appstream-rpms
The dnf install or yum install command can be used to install one of the available Java packages.
~]# dnf install java-1.8.0-openjdk-devel.x86_64
JAVA_HOME
Many Java application expect the JAVA_HOME variable. The JAVA_HOME is the path to the Java directory that contains the bin folder. For example, if your JAVA bin directory is lcated at /usr/lib/jvm/adoptopenjdk-21.0.4.7/jdk-21.0.4+7
~]$ ll /usr/lib/jvm/adoptopenjdk-21.0.4.7/jdk-21.0.4+7
total 24
drwxr-xr-x. 2 root root 4096 Jul 16 18:41 bin
drwxr-xr-x. 5 root root 146 Jul 16 18:40 conf
drwxr-xr-x. 3 root root 132 Jul 16 18:40 include
drwxr-xr-x. 2 root root 4096 Jul 16 18:40 jmods
drwxr-xr-x. 71 root root 4096 Jul 16 18:40 legal
drwxr-xr-x. 5 root root 4096 Jul 16 18:41 lib
drwxr-xr-x. 3 root root 18 Jul 16 18:40 man
-rw-r--r--. 1 root root 2400 Jul 16 18:41 NOTICE
-rw-r--r--. 1 root root 1610 Jul 16 18:40 release
Then you would set JAVA_HOME to /usr/lib/jvm/adoptopenjdk-21.0.4.7/jdk-21.0.4+7. The export command can be used to temporarily set the JAVA_HOME variable.
export JAVA_HOME=/usr/lib/jvm/adoptopenjdk-21.0.4.7/jdk-21.0.4+7
Or, you can set the JAVA_HOME variable in your .bash_profile file.
[john.doe@localhost ~]$ cat $HOME/.bash_profile
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
export JAVA_HOME=/usr/lib/jvm/adoptopenjdk-21.0.4.7/jdk-21.0.4+7
Did you find this article helpful?
If so, consider buying me a coffee over at