Bootstrap FreeKB - Java - Install Java on Linux
Java - Install Java on Linux

Updated:   |  Java articles

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

  1. Go to https://www.java.com.
  2. Select Download.
  3. Select See all Java downloads.
  4. 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

  1. Go to https://www.adoptium.net/temurin/releases.
  2. 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 Buy Me A Coffee



Comments


September 02 2020 by jb
doesn't really help me. thanks anyway

Add a Comment


Please enter c047da in the box below so that we can be sure you are a human.