How to Install Java on Linux via apt and yum/dnf
On Linux, Java installs through your package manager: apt for Debian-family distros, dnf (or the older yum) for Red Hat-family. Both pull from trusted repositories and handle upgrades automatically.
apt (Debian, Ubuntu, Linux Mint, Pop!_OS)
# Update package index first
sudo apt update
# Java 21 JDK (Ubuntu 22.04+)
sudo apt install openjdk-21-jdk -y
# Java 17 JDK
sudo apt install openjdk-17-jdk -y
# Verify
java -version
javac -version
Adding the Adoptium repository (for versions not in default apt repos)
wget -qO - https://packages.adoptium.net/artifactory/api/gpg/key/public \
| sudo gpg --dearmor -o /usr/share/keyrings/adoptium.gpg
echo "deb [signed-by=/usr/share/keyrings/adoptium.gpg] \
https://packages.adoptium.net/artifactory/deb \
$(. /etc/os-release && echo "$VERSION_CODENAME") main" \
| sudo tee /etc/apt/sources.list.d/adoptium.list
sudo apt update
sudo apt install temurin-21-jdk -y
dnf (Fedora, RHEL 8+, CentOS Stream, AlmaLinux, Rocky Linux)
# Java 21
sudo dnf install java-21-openjdk-devel -y
# Java 17
sudo dnf install java-17-openjdk-devel -y
# Verify
java -version
yum (RHEL 7, older CentOS)
sudo yum install java-11-openjdk-devel -y
# Java 17/21 may require EPEL or a separate repo:
sudo yum install epel-release -y
sudo yum install java-21-openjdk-devel -y
Managing multiple JDKs with update-alternatives
# See all registered java alternatives:
sudo update-alternatives --display java
# Interactive switch:
sudo update-alternatives --config java
On Fedora/RHEL, use alternatives (same tool, different name):
sudo alternatives --config java
Setting JAVA_HOME system-wide
Create a file in /etc/profile.d/:
echo 'export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))' \
| sudo tee /etc/profile.d/java.sh
source /etc/profile.d/java.sh
echo $JAVA_HOME
Install without root (SDKMAN!)
curl -s "https://get.sdkman.io" | bash
source ~/.sdkman/bin/sdkman-init.sh
sdk install java 21.0.3-tem
SDKMAN! installs entirely in ~/.sdkman — no sudo needed, and you can switch versions per shell session or per directory.