How to Fix java.lang.UnsupportedClassVersionError in Java? - GeeksforGeeks

28 Jan, 2021
The UnsupportedClassVersionError is a sub-class of the LinkageError and thrown by the Java Virtual Machine (JVM). When a class file is read and when major and minor version numbers are not supported, this error is thrown, and especially during the linking phase, this error is thrown
A sample snapshot of UnsupportedClassVersionError 
 
Situations when the error is thrown :
When we tried to compile a program using a higher version of Java and execute it using a JVM of a lower version, this error is thrown. But the reverse case is not true.
Hence, it is important to note the java versions 
 
Get the installed java version :
java –version  (In command prompt(windows), we can give)
Check java version
 
Fixing the program via command line :
In order to overcome the UnsupportedClassVersionError, we can either compile our code for an earlier version of Java or run our code on a newer Java version. It is about our choice of decision only. If a third-party library is used then, it is better to run on a newer java version and if it is for distribution, it is best to compile to an older version.
 
Using JAVA_HOME Environment Variable :
While doing Java programs, always it is good to set JAVA_HOME and setting that value in path
We can check that in command prompt in the below way also
C:\Windows\system32>echo %JAVA_HOME%
C:\Program Files\Java\jdk-9.0.4
 
Requirements to run a java program on a new JRE:
Move to the directory and locate the bin directory. For example, if the JRE is in location like
C:\Program Files\Java\jdk-11.0.2, then navigate till C:\Program Files\Java\jdk-11.0.2\bin
Execute the program as
java <filename>   // Even we can give filename with full package
 
Requirements to run a java program on an older JRE :
Example : 
C:\Program Files\Java\jdk1.8.0_31\bin\javac <filename along with package>
In order to ensure compatibility, we can point “-bootclasspath” at the rt.jar of the targeted JRE:
javac -bootclasspath "C:\Program Files\Java\jdk1.8.0_31\jre\lib\rt.jar" 
\ -source 1.8 -target 1.8 <filename>
[Applicable mainly to JDK 8 and lower]
But in JDK 9, the “–release” parameter was added to replace “-source” and “-target”. 
The “–release” option supports targets 6, 7, 8, 9, 10, and 11. As an example, let us use “–release” to target Java 8:
javac --release 8 <filename>
There are many IDEs are available for Java development
Let us see how we can overcome “UnsupportedClassVersionError” in Eclipse
Selecting JRE using Java Build Path->Installed JRE
Java compiler level selection :
Java compiler selection
Maven
We can control the version of Java when we build and package a file in Maven. When using Java 7 or older, we set the source and target for the compiler plugin.
Let’s set the source and target using compiler plugin properties:
–release option added in Java 9
Conclusion :
By setting the environment changes either via command-line way or via IDE way or via Maven way, we can overcome “unsupportedclassversion”.
Java-Exceptions
Picked
Technical Scripter 2020
Java
Technical Scripter
Java
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Functional Interfaces in Java
Stream In Java
Constructors in Java
Different ways of Reading a text file in Java
Exceptions in Java
Generics in Java
Comparator Interface in Java with Examples
Strings in Java
How to remove an element from ArrayList in Java?
Difference between Abstract Class and Interface in Java