Explain Codes LogoExplain Codes Logo

How to fix java.lang.UnsupportedClassVersionError: Unsupported major.minor version

java
unsupported-class-version
jdk-configuration
environment-variables
Nikita BarsukovbyNikita Barsukov·Aug 17, 2024
TLDR

Tackle java.lang.UnsupportedClassVersionError by syncing your JDK and JRE versions. If you compiled the code with a higher JDK (say, JDK 11) but try to run it with a lower JRE (say, JRE 8), you are likely to get this error. Either upgrade your JRE or recompile the code with a lower JDK:

JRE upgrade:

sudo apt-get install openjdk-11-jre # Please understand, your JRE need to catch up

Recompiling:

javac -target 1.8 MyJavaClass.java # Be kind to JRE, take a step back with JDK

Set correct Java paths with:

export JAVA_HOME=/path/to/jdk export PATH=$JAVA_HOME/bin:$PATH

Version discrepancy: the core of the issue

java.lang.UnsupportedClassVersionError essentially signifies that the compilation and execution versions of Java are out of sync. For example, a class version of 51.0 means that the code was compiled using Java SE 7. Hence, your runtime JRE must be version 7 or above. If not, the error appears.

Knowing this, always ensure to set your JAVA_HOME and PATH environment variables correctly every time you update your JDK.

Accurate JDK and IDE settings

To precisely control the versions, you can compile your code for older Java versions using the -target flag with javac. Keep in mind to install the JDK, which brings along the JRE as well as the compilers, and not just the JRE so you have the necessary tools for Java development.

When your project targets old versions for maximum compatibility, make sure to compile with an older JDK. This thwarts deploying newer APIs which are not present in the target environment causing potential runtime errors.

Version selection guidelines

With multiple Java installations, it's crucial to follow these pointers:

  • Make sure the development JDK version matches or is older than the target runtime.
  • Use javap -v to inspect the version of class files produced.
  • Keep a handy reference to the Java version compatibility chart to cross-check the JDK you should use to match your intended runtime.

Potential roadblocks & solutions

Here are some common issues and their fixes:

  • Incorrect JAVA_HOME: Confirm that JAVA_HOME environment variable is set to the accurate JDK installation directory.
  • Outdated PATH: Update your PATH variable swiftly when you update or switch Java versions.
  • Inconsistent IDE configuration: Ensure that the defined compiler in your IDE is the same as your targeted runtime.
  • Overlooked library compatibility: All libraries used in your project must be compatible with your target JDK.

By proactively taking care of these, you can prevent not only UnsupportedClassVersionError but other related issues as well.