How to Install Java on Fedora

Install Java on Fedora

Installing Java on Fedora doesn’t have to be complicated. Whether you’re a developer getting ready to build your next application or a user who needs Java to run specific software, this comprehensive guide will walk you through every step of the process. By the end of this article, you’ll have Java up and running on your Fedora system like a pro.

Understanding Java and Fedora Compatibility

What is Java and Why Do You Need It?

Java is one of the world’s most popular programming languages and computing platforms. First released by Sun Microsystems in 1995, Java follows the principle of “write once, run anywhere,” making it incredibly versatile for developers and essential for many applications.

You might need Java for various reasons:

  • Running Java-based applications like IntelliJ IDEA, Eclipse, or NetBeans
  • Developing Java applications
  • Using enterprise software that requires Java Runtime Environment (JRE)
  • Running Minecraft (yes, it’s built in Java!)
  • Working with big data tools like Apache Spark or Hadoop

Fedora’s Approach to Java Packages

Fedora, being a cutting-edge Linux distribution, takes a forward-thinking approach to Java packages. Unlike some distributions that might stick with older versions, Fedora typically includes recent Java versions in their repositories. This means you get access to the latest features and security updates without jumping through hoops.

The Fedora team prioritizes OpenJDK, which is the open-source implementation of Java. This aligns perfectly with Fedora’s commitment to free and open-source software. However, you can still install Oracle’s proprietary JDK if your specific use case requires it.

Prerequisites Before Installing Java on Fedora

System Requirements

Before diving into the installation process, let’s make sure your system meets the basic requirements:

  • RAM: Minimum 512 MB (2 GB recommended for development work)
  • Disk Space: At least 200 MB free space for OpenJDK installation
  • Architecture: x86_64 (most common), aarch64, or other supported architectures
  • User Privileges: Administrator access (sudo privileges)

Don’t worry if these numbers seem small – modern Fedora installations typically exceed these requirements by default.

Checking Your Current Fedora Version

Knowing your Fedora version helps ensure you’re following the right instructions. Different Fedora versions might have slightly different package names or procedures.

Using the Terminal to Check System Info

Open your terminal (Ctrl+Alt+T) and run:

cat /etc/fedora-release

This command will show you something like “Fedora release 39 (Thirty Nine)” or whatever version you’re running. You can also use:

hostnamectl

This provides more detailed system information, including your kernel version and architecture.

Different Java Versions Available for Fedora

OpenJDK vs Oracle JDK

Here’s where things get interesting. You have two main options:

OpenJDK is the open-source implementation of Java. It’s free, regularly updated, and fully compatible with Java standards. Most developers and organizations use OpenJDK because it offers the same functionality as Oracle JDK without licensing concerns.

Oracle JDK is the commercial implementation from Oracle. While it used to offer additional features, the gap has narrowed significantly. Oracle JDK now requires a commercial license for production use in many cases, making OpenJDK the preferred choice for most users.

Java 8, 11, 17, and 21: Which Version to Choose?

Choosing the right Java version depends on your specific needs:

  • Java 8: Still widely used in enterprise environments, but reaching end-of-life
  • Java 11: First LTS version after Java 8, stable and well-supported
  • Java 17: Current recommended LTS version with excellent performance improvements
  • Java 21: Latest LTS version with cutting-edge features

Long-Term Support (LTS) Versions

LTS versions receive extended support and are ideal for production environments. If you’re unsure which version to choose, go with Java 17 – it strikes the perfect balance between stability and modern features.

Method 1: Installing Java Using DNF Package Manager

The easiest and most Fedora-friendly way to install Java is using the DNF package manager. This method ensures proper integration with your system and automatic updates.

Installing OpenJDK 17 (Recommended)

Let’s start with Java 17, which I recommend for most users:

sudo dnf update
sudo dnf install java-17-openjdk java-17-openjdk-devel

The first command updates your package database, ensuring you get the latest version. The second command installs both the runtime environment and development tools.

Here’s what each package does:

  • java-17-openjdk: Provides the Java Runtime Environment (JRE)
  • java-17-openjdk-devel: Includes the Java Development Kit (JDK) with compiler and other development tools

Installing OpenJDK 11

If you need Java 11 for compatibility reasons:

sudo dnf install java-11-openjdk java-11-openjdk-devel

Installing OpenJDK 8

For legacy applications that specifically require Java 8:

sudo dnf install java-1.8.0-openjdk java-1.8.0-openjdk-devel

Notice the different naming convention for Java 8 – it uses “1.8.0” instead of just “8”.

Verifying Your Installation

After installation, verify that Java is properly installed:

java -version
javac -version

You should see output showing your Java version and build information. If you installed the development package, both commands should work. If you only installed the runtime, only java -version will work.

Method 2: Installing Oracle JDK Manually

While OpenJDK covers most use cases, some situations might require Oracle’s JDK. This method involves more steps but gives you the official Oracle implementation.

Downloading Oracle JDK from Official Website

  1. Visit Oracle’s official Java download page
  2. Accept the license agreement
  3. Download the Linux x64 tar.gz file for your desired Java version
  4. Save it to your Downloads folder

Setting Up Oracle JDK

Navigate to your Downloads folder and extract the archive:

cd ~/Downloads
tar -xzf jdk-17_linux-x64_bin.tar.gz

Move the extracted folder to a system-wide location:

sudo mv jdk-17.0.x /opt/oracle-jdk-17

Replace “17.0.x” with your actual downloaded version number.

Configuring Environment Variables

Create a script to set up environment variables:

sudo nano /etc/profile.d/oracle-jdk.sh

Add the following content:

export JAVA_HOME=/opt/oracle-jdk-17
export PATH=$PATH:$JAVA_HOME/bin

Make the script executable:

sudo chmod +x /etc/profile.d/oracle-jdk.sh

Log out and log back in, or run source /etc/profile.d/oracle-jdk.sh to apply changes immediately.

Method 3: Using SDKMAN for Java Management

What is SDKMAN?

SDKMAN (Software Development Kit Manager) is a fantastic tool for managing multiple versions of Java and other JVM-related tools. Think of it as a version manager that makes switching between different Java versions as easy as typing a single command.

Installing SDKMAN on Fedora

First, install required dependencies:

sudo dnf install curl zip unzip

Then install SDKMAN:

curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"

Verify the installation:

sdk version

Managing Multiple Java Versions with SDKMAN

List available Java versions:

sdk list java

Install a specific version:

sdk install java 17.0.8-tem

Switch between versions:

sdk use java 17.0.8-tem

Set a default version:

sdk default java 17.0.8-tem

Configuring Java Environment Variables

Setting JAVA_HOME

The JAVA_HOME environment variable tells applications where to find your Java installation. This is crucial for many development tools and applications.

Find your Java installation path:

sudo alternatives --config java

This command shows you all installed Java versions and their paths. Choose the one you want to set as default.

Updating PATH Variable

Your PATH variable should include Java’s bin directory. If you installed via DNF, this is usually handled automatically. For manual installations, add it to your shell profile:

echo 'export PATH=$PATH:$JAVA_HOME/bin' >> ~/.bashrc

Making Changes Permanent

To ensure your environment variables persist across reboots and new terminal sessions, add them to your shell profile:

echo 'export JAVA_HOME=/usr/lib/jvm/java-17-openjdk' >> ~/.bashrc
echo 'export PATH=$PATH:$JAVA_HOME/bin' >> ~/.bashrc
source ~/.bashrc

Managing Multiple Java Versions on Fedora

Using alternatives Command

Fedora’s alternatives system allows you to manage multiple versions of the same software elegantly. When you install multiple Java versions via DNF, they’re automatically registered with alternatives.

View current Java alternatives:

sudo alternatives --display java

Switching Between Java Versions

To switch your default Java version:

sudo alternatives --config java

This command presents a menu where you can select your preferred Java version. The same works for the Java compiler:

sudo alternatives --config javac

Troubleshooting Common Java Installation Issues

Permission Denied Errors

If you encounter permission errors during installation, make sure you’re using sudo for system-wide installations:

sudo dnf install java-17-openjdk

For user-specific installations (like with SDKMAN), don’t use sudo – it can cause ownership issues.

PATH Not Updated Issues

If Java commands aren’t found after installation, your PATH might not be updated. Try these solutions:

  1. Restart your terminal session
  2. Run source ~/.bashrc
  3. Check if JAVA_HOME is set correctly: echo $JAVA_HOME

Resolving Package Conflicts

Sometimes, different Java packages might conflict. Use DNF to resolve conflicts:

sudo dnf check
sudo dnf autoremove

These commands identify and resolve package conflicts automatically.

Testing Your Java Installation

Running Your First Java Program

Let’s create a simple “Hello World” program to test your installation:

nano HelloWorld.java

Add this content:

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, Fedora Java World!");
    }
}

Compile and run:

javac HelloWorld.java
java HelloWorld

If you see “Hello, Fedora Java World!” printed to your terminal, congratulations – Java is working perfectly!

Checking Java Compiler (javac)

The Java compiler is essential for development work. Verify it’s working:

javac -version

This should display your Java compiler version, confirming that the JDK (not just JRE) is properly installed.

Performance Optimization Tips

JVM Memory Settings

For better performance, especially when running memory-intensive applications, you can tune JVM memory settings:

export JAVA_OPTS="-Xms512m -Xmx2g"
  • -Xms512m: Initial heap size (512 MB)
  • -Xmx2g: Maximum heap size (2 GB)

Garbage Collection Tuning

Modern Java versions have excellent garbage collection, but you can optimize further:

export JAVA_OPTS="-XX:+UseG1GC -XX:MaxGCPauseMillis=200"

These settings enable the G1 garbage collector with optimized pause times.

Keeping Java Updated on Fedora

Automatic Updates via DNF

One major advantage of installing Java through DNF is automatic updates. When you run your regular system updates, Java updates automatically:

sudo dnf update

This keeps your Java installation secure and up-to-date with the latest patches.

Manual Update Process

To specifically update Java packages:

sudo dnf update java-*-openjdk*

This command updates all OpenJDK packages on your system.

Frequently Asked Questions (FAQs)

Q1: Can I install multiple Java versions on Fedora simultaneously?
Yes, absolutely! Fedora’s alternatives system makes it easy to install and manage multiple Java versions. You can switch between them using the sudo alternatives --config java command whenever needed.

Q2: What’s the difference between installing java-openjdk and java-openjdk-devel packages?
The base java-openjdk package provides only the Java Runtime Environment (JRE) for running Java applications. The java-openjdk-devel package includes the full Java Development Kit (JDK) with compiler, debugger, and other development tools needed for Java programming.

Q3: Should I use OpenJDK or Oracle JDK for production applications?
For most production applications, OpenJDK is the recommended choice. It’s free, open-source, receives regular security updates, and is functionally equivalent to Oracle JDK. Oracle JDK now requires commercial licensing for many production use cases.

Q4: How do I completely remove Java from my Fedora system?
To remove all Java packages installed via DNF, use: sudo dnf remove java-*-openjdk*. For manually installed versions, delete the installation directory and remove any custom environment variables from your shell profile files.

Q5: Why does my Java application show “JAVA_HOME not found” error even after installation?
This error occurs when the JAVA_HOME environment variable isn’t set properly. Run echo $JAVA_HOME to check if it’s set. If not, add export JAVA_HOME=/usr/lib/jvm/java-17-openjdk (adjust path as needed) to your ~/.bashrc file and restart your terminal.

Marshall Anthony is a professional Linux DevOps writer with a passion for technology and innovation. With over 8 years of experience in the industry, he has become a go-to expert for anyone looking to learn more about Linux.

Related Posts