How to Install OpenJDK 11 on CentOS 8

Reading Time: 5 minutes

What is OpenJDK?

openjdk logo

OpenJDk or Open Java Development Kit is a free, open-source framework of the Java Platform, Standard Edition (or Java SE). It contains the virtual machine, the Java Class Library, and the Java compiler. The difference between the Oracle OpenJDK and Oracle JDK is that OpenJDK is a source code reference point for the open-source model. Simultaneously, the Oracle JDK is a continuation or advanced model of the OpenJDK, which is not open source and requires a license to use.

In this article, we will be installing OpenJDK on Centos 8.

Prerequisites

  • A Liquid Web core managed server running CentOS 8.
  • An account with root privileges
  • A root password set up on our system.
  • Access to a terminal window or an SSH command-line interface
[root@host2 ~]# cat /etc/redhat-release
CentOS Linux release 8.2.2004 (Core)
[root@host2 ~]#

Install OpenJDK 11

First, we want to locate the available versions of OpenJDK listed in the CentOS 8 repository using the following command.

[root@host2 ~]# dnf search jdk
Last metadata expiration check: 0:02:37 ago on Fri Aug 21 15:09:18 2020.
========== Name & Summary Matched: jdk ==========
java-11-openjdk-demo.x86_64 : OpenJDK Demos 11
java-1.8.0-openjdk-demo.x86_64 : OpenJDK Demos 8
java-11-openjdk-jmods.x86_64 : JMods for OpenJDK 11
java-11-openjdk-src.x86_64 : OpenJDK Source Bundle 11
java-1.8.0-openjdk-src.x86_64 : OpenJDK Source Bundle 8
java-11-openjdk.x86_64 : OpenJDK Runtime Environment 11
copy-jdk-configs.noarch : JDKs configuration files copier
java-1.8.0-openjdk.x86_64 : OpenJDK Runtime Environment 8
java-11-openjdk-javadoc.x86_64 : OpenJDK 11 API documentation
java-1.8.0-openjdk-javadoc.noarch : OpenJDK 8 API documentation
>>>java-11-openjdk-devel.x86_64 : OpenJDK Development Environment 11
java-1.8.0-openjdk-devel.x86_64 : OpenJDK Development Environment 8
java-11-openjdk-headless.x86_64 : OpenJDK Headless Runtime Environment 11
java-1.8.0-openjdk-accessibility.x86_64 : OpenJDK 8 accessibility connector
java-1.8.0-openjdk-headless.x86_64 : OpenJDK Headless Runtime Environment 8
java-11-openjdk-javadoc-zip.x86_64 : OpenJDK 11 API documentation compressed in single archive
java-1.8.0-openjdk-javadoc-zip.noarch : OpenJDK 8 API documentation compressed in single archive
========== Summary Matched: jdk ==========
jmc-core.noarch : Core API for JDK Mission Control
jmc.x86_64 : JDK Mission Control is a profiling and diagnostics tool
icedtea-web.noarch : Additional Java components for OpenJDK - Java browser plug-in and Web Start implementation
[root@host2 ~]#  
Note:
While we can run Java apps directly using the JRE, our apps will have to be compiled each time they are executed, which tends to be slower than running apps that have already been compiled. This would not be desirable if we plan to execute apps multiple times.

As you can see above, the version we want to install is:
java-11-openjdk-devel.x86_64 : OpenJDK Development Environment 11

To install this version, run the following command.

[root@host2 ~]# dnf install java-11-openjdk-devel.x86_64
Last metadata expiration check: 0:09:28 ago on Fri Aug 21 15:19:11 2020.
Dependencies resolved.
========================================================================
 Package Architecture Version Repository Size
========================================================================
Installing:
 Java-11-openjdk-devel x86_64 1:11.0.8.10-0.el8_2 system-AppStream 3.4 M

Installing dependencies:
…
…
…
...
Enabling module streams:
 javapackages-runtime 201801

Transaction Summary
========================================================================
Install 63 Packages

Total download size: 68 M
Installed size: 246 M
Is this ok [y/N]:   
Downloading Packages:
(1/63): cups-libs-2.2.6-33.el8.x86_64.rpm 15 MB/s | 432 kB 00:00
(2/63): glib-networking-2.56.1-1.1.el8.x86_64.rpm 9.9 MB/s | 155 kB 00:00
(3/63): gdk-pixbuf2-2.36.12-5.el8.x86_64.rpm 8.9 MB/s | 467 kB 00:00
…
…
…
------------------------------------------------------------------------------------------------------------------------
Total 73 MB/s | 68 MB 00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Running scriptlet: copy-jdk-configs-3.7-1.el8.noarch 1/1
  Running scriptlet: java-11-openjdk-headless-1:11.0.8.10-0.el8_2.x86_64 1/1
…
…
…
Verifying : tzdata-java-2020a-1.el8.noarch 61/63
Verifying : xorg-x11-font-utils-1:7.5-40.el8.x86_64 62/63
Verifying : xorg-x11-fonts-Type1-7.5-19.el8.noarch 63/63
Installed:
java-11-openjdk-1:11.0.8.10-0.el8_2.x86_64 java-11-openjdk-devel-1:11.0.8.10-0.el8_2.x86_64
java-11-openjdk-headless-1:11.0.8.10-0.el8_2.x86_64 javapackages-filesystem-5.3.0-1.module_el8.0.0+11+5b8c10bd.noarch

Complete!
[root@host2 ~]#

Verify Installation

Once the installation is completed, you can verify the installed Java version by running the following command.

[root@host2 ~]# java -version
openjdk version "11.0.8" 2020-07-14 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.8+10-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.8+10-LTS, mixed mode, sharing)
[root@host2 ~]# 

Since we have chosen the full installation of the OpenJDK development kit, we can check the compiler version as well.

[root@host2 ~]# javac -version
javac 11.0.8
[root@host2 ~]#

Install OpenJDK 8

Some Java apps only run on OpenJDK 8. If this is the case, we need to install OpenJDK 8. We can install OpenJDK 8 using the following command.

[root@host2 ~]# dnf install java-1.8.0-openjdk-devel.x86_64

Verify Installation

After installing this version of Java, we can check the version using the following command.

[root@host2 ~]# java -version
openjdk version "1.8.0_242"
OpenJDK Runtime Environment (build 1.8.0_242-b09)
OpenJDK 64-Bit Server VM (build 25.242-b09, mixed mode)
[root@host2 ~]#

Set Java Environment Variables

Now, we need to set the environmental variables for the new Java installations. This allows us to add both the JAVA_HOME and PATH settings, which will ensure that our Java applications can run without issue.

cat > /etc/profile.d/java11.sh <<EOF
export JAVA_HOME=\$(dirname \$(dirname \$(readlink \$(readlink \$(which javac)))))
export PATH=\$PATH:\$JAVA_HOME/bin
export CLASSPATH=.:\$JAVA_HOME/jre/lib:\$JAVA_HOME/lib:\$JAVA_HOME/lib/tools.jar
EOF

Next, we will source the file to begin using it without having to log out and log back in.

[root@host2 ~]# source /etc/profile.d/java11.sh

To confirm the changes, run the following commands.

[root@host2 ~]# echo $JAVA_HOME
/usr/lib/jvm/java-11-openjdk-11.0.8.10-0.el8_2.x86_64

[root@host2 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-0.el8_2.x86_64/bin:/usr/lib/jvm/java-11-openjdk-11.0.8.10-0.el8_2.x86_64/bin:/bin

If after installing both versions of Java by some chance show the following variables:

[root@host2 ~]# echo $JAVA_HOME
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-0.el8_2.x86_64

[root@host2 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-0.el8_2.x86_64/bin

and we wish to change the JAVA_HOME and PATH variables back to Java 11, run the following commands.

export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.8.10-0.el8_2.x86_64
export PATH=$PATH:$JRE_HOME/bin

We can also view the following folder location to see the full view of all the Java installations.

[root@host2 ~]# ll /usr/lib/jvm/
total 8
lrwxrwxrwx 1 root root 26 Aug 21 17:23 java -> /etc/alternatives/java_sdk
lrwxrwxrwx 1 root root 32 Aug 21 16:06 java-1.8.0 -> /etc/alternatives/java_sdk_1.8.0
lrwxrwxrwx 1 root root 40 Aug 21 16:06 java-1.8.0-openjdk -> /etc/alternatives/java_sdk_1.8.0_openjdk
drwxr-xr-x 7 root root 4096 Aug 21 16:06 java-1.8.0-openjdk-1.8.0.262.b10-0.el8_2.x86_64
lrwxrwxrwx 1 root root 29 Aug 21 15:49 java-11 -> /etc/alternatives/java_sdk_11
lrwxrwxrwx 1 root root 37 Aug 21 15:49 java-11-openjdk -> /etc/alternatives/java_sdk_11_openjdk
drwxr-xr-x 7 root root 4096 Aug 21 15:49 java-11-openjdk-11.0.8.10-0.el8_2.x86_64
lrwxrwxrwx 1 root root 34 Aug 21 16:06 java-openjdk -> /etc/alternatives/java_sdk_openjdk
lrwxrwxrwx 1 root root 21 Aug 21 18:04 jre -> /etc/alternatives/jre
lrwxrwxrwx 1 root root 27 Aug 21 16:06 jre-1.8.0 -> /etc/alternatives/jre_1.8.0
lrwxrwxrwx 1 root root 35 Aug 21 16:06 jre-1.8.0-openjdk -> /etc/alternatives/jre_1.8.0_openjdk
lrwxrwxrwx 1 root root 51 Jul 16 11:10 jre-1.8.0-openjdk-1.8.0.262.b10-0.el8_2.x86_64 -> java-1.8.0-openjdk-1.8.0.262.b10-0.el8_2.x86_64/jre
lrwxrwxrwx 1 root root 24 Aug 21 15:49 jre-11 -> /etc/alternatives/jre_11
lrwxrwxrwx 1 root root 32 Aug 21 15:49 jre-11-openjdk -> /etc/alternatives/jre_11_openjdk
lrwxrwxrwx 1 root root 40 Jul 16 11:06 jre-11-openjdk-11.0.8.10-0.el8_2.x86_64 -> java-11-openjdk-11.0.8.10-0.el8_2.x86_64
lrwxrwxrwx 1 root root 29 Aug 21 16:06 jre-openjdk -> /etc/alternatives/jre_openjdk
[root@host2 ~]# 

Change Java Versions

If we have several versions of Java installed, we can select an alternative if need be. To change versions, run the following command. 

[root@host2 ~]# alternatives --config java

There are 2 programs which provide 'java'.

  Selection Command
-----------------------------------------------
 + 1 java-11-openjdk.x86_64 (/usr/lib/jvm/java-11-openjdk-11.0.8.10-0.el8_2.x86_64/bin/java)
* 2 java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-0.el8_2.x86_64/jre/bin/java)

Enter to keep the current selection[+], or type selection number: 1
[root@host2 ~]#   

In this case, we selected number 1, to keep the java-11-openjdk.x86_64 version. 

Conclusion

We pride ourselves on being The Most Helpful Humans In Hosting™!

Our talented Support Teams are full of experienced Linux technicians and System administrators who have years of experience in web hosting technologies, especially those discussed in this article. We are always available to assist with any issues related to this article, 24 hours a day, 7 days a week 365 days a year.

If you are a Fully Managed VPS server, Cloud Dedicated, VMWare Private Cloud, Private Parent server or a Dedicated server owner and you are uncomfortable with performing any of the steps outlined, we can be reached via phone @800.580.4985, a chat or support ticket to assisting you with this process.

Using Ansible in DevOps: A Beginners Guide

Reading Time: 13 minutes

Introduction

Ansible is a system of configuration management written in Python programming language which uses a declarative markup language to describe configurations. It’s used for automation of configuration and OS setup. Ansible is often used to manage Linux-nodes, but Windows is also supported. It supports work with devices with Python v2.4 and higher installed through SSH connection. In this article, we are going to review the DevOps tool called Ansible.    

Continue reading “Using Ansible in DevOps: A Beginners Guide”

Kubernetes vs. Docker Swarm: A Comparison

Reading Time: 5 minutes

In this tutorial, we will be reviewing what the fundamental similarities and distinctions are between Kubernetes and Docker Swarm. Kubernetes and Docker are two of the major players in container orchestration. Both Kubernetes and Docker Swarm continue to grow in popularity as they are increasingly used by those working with container deployment, orchestration, and management. Across all vertical markets, businesses continue to find new methods of utilization and practice with more uses constantly being discovered.

docker.kubernetes
Continue reading “Kubernetes vs. Docker Swarm: A Comparison”

How to Install Taiga on Ubuntu 16.04

Reading Time: 5 minutes
taiga logo

Taiga is a free, open-source project management system. The back end consists of an API written in Python3 and Django, and the front end is written in AngularJS and CoffeeScript. Taiga can manage simple and complex projects, and also monitors the progress of a project. Taiga maintains logs that are displayed in the form of a worklist with all the functions and user stories added to the project. 

Continue reading “How to Install Taiga on Ubuntu 16.04”

How to Install Chocolatey on Windows

Reading Time: 4 minutes


Continue reading “How to Install Chocolatey on Windows”

How to Install Node.js on a Windows Server

Reading Time: 2 minutes

Node.js is a Javascript runtime built with fast deployments in mind. Both the client and server-side of the application are Javascript. It provides an asynchronous approach to serving up content, providing for extremely responsive applications. Node.js is cross-platform and installable on Linux, macOS, and Windows. This tutorial covers the installation of Node.js on a Windows Server.

Continue reading “How to Install Node.js on a Windows Server”

How to Install and Use Containerization

Reading Time: 6 minutes

What is Containerization?

Containerization is a form of virtualized operating system developed as a response to the many problems of hardware-level virtualization. Because the latter runs a full-blown guest operating system, it is very resource-intensive and incurs a significant amount of overhead, but containerization is much lighter. Since the containers share the host machine’s kernel, the resources are not wasted on running separate operating system tasks. This allows for a much quicker and lightweight deployment of applications.

Continue reading “How to Install and Use Containerization”

How to Install OBS on Linux, Windows and MacOS

Reading Time: 5 minutes

What is OBS?

obs_icon_small

OBS (Open Broadcaster Software) is a free and open-source video recording and livestreaming software program that is written in C, C ++, and Qt and developed by the OBS project and a community of independent developers. It is mainly used for streaming and recording videos. It supports a wide range of plugins to extend the functionality of the program.

Continue reading “How to Install OBS on Linux, Windows and MacOS”

How to Install Node.js via NVM on Ubuntu 18.04

Reading Time: 2 minutes

What is Node.js?

Node.js_logo

Node.js is an open-source javascript runtime environment. It is memory efficient and is intentionally asynchronous. It is deployable on multiple platforms, including Windows, Mac OS X, and Linux, and is suited for rapid development. It’s event-driven architecture make it highly scalable and useful for intensive data-driven applications.

Continue reading “How to Install Node.js via NVM on Ubuntu 18.04”

How to Install NVM for Node.js on CentOS 8

Reading Time: 3 minutes

Node Version Manager, also known as NVM is used to control and manage multiple active versions of Node.js in one system. It is a command line utility and a bash script that allows programmers to shift between different versions of Node.js. They will be able to install any version using a single command and setting defaults using the command line utility.

Continue reading “How to Install NVM for Node.js on CentOS 8”