1718

I am trying to use Notepad++ as my all-in-one tool edit, run, compile, etc.

I have JRE installed, and I have setup my path variable to the .../bin directory.

When I run my "Hello world" in Notepad++, I get this message:

java.lang.UnsupportedClassVersionError: test_hello_world :
 Unsupported major.minor version 51.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(Unknown Source)
       .........................................

I think the problem here is about versions; some versions of Java may be old or too new.

  1. How do I fix it?
  2. Should I install the JDK, and setup my path variable to the JDK instead of JRE?
  3. What is the difference between the PATH variable in JRE or JDK?
Hearen
  • 7,420
  • 4
  • 53
  • 63
ERJAN
  • 23,696
  • 23
  • 72
  • 146
  • did you install jdk as well ? jre is Java RunTime environment , To create java apps , you need jdk as well – CyprUS Apr 30 '12 at 11:30
  • yes i did, and now my path variable points to where jdk is. yet i still have this "unsupported minor version 51.0" error do you think i should install older version of jdk? i m using jdk 1.7.0 – ERJAN May 01 '12 at 08:30
  • 20
    This happened to me on Mac OS X when I was having problems due to the weird Apple java 6 and Oracle java 7 situation on OSX these days. short version: Compile with JDK7, Run with JDK6, get this. – Warren P Oct 07 '13 at 04:00
  • 7
    In java ClassName should Be Start with Capital letter ;) – Ashish Panery Feb 03 '14 at 16:47
  • Please see this answer. It will solver your problem. http://stackoverflow.com/a/11612154/649451 – Venugopal Madathil Feb 20 '14 at 13:21
  • This also affects Xamarin Studio. It appears as a build-time warning to the effect: "major version 51 is newer than 50, the highest major version supported by your compiler." Installing 32-bit JRE7 resolved the issue for me. – Barton Dec 12 '14 at 20:41
  • 6
    For El Captain, this answer fixed it for me: http://stackoverflow.com/a/34201991/1615594 – Taku Jan 24 '16 at 11:35
  • You should upgrade your jre. The sudo update-alternatives --config java is useful – E A May 10 '17 at 06:30
  • This particular exception would benefit immensely with being changed to `Unsupported major.minor version 51.0 (Is your Java new enough?)` – Thorbjørn Ravn Andersen Jun 27 '18 at 18:18
  • A somewhat obscure [variation](https://stackoverflow.com/q/71961688/230513) of this arises when using [tag:node.js] with JDBC. – trashgod Apr 23 '22 at 12:46
  • I changed my java project version and matches the jdk version installed on my computer, and boom, problem sovled! – Enfield Li Nov 23 '22 at 02:45

51 Answers51

2117

The version number shown describes the version of the JRE the class file is compatible with.

The reported major numbers are:

Java SE 21 = 65,
Java SE 20 = 64,
Java SE 19 = 63,
Java SE 18 = 62,
Java SE 17 = 61,
Java SE 16 = 60, 
Java SE 15 = 59,
Java SE 14 = 58,
Java SE 13 = 57,
Java SE 12 = 56,
Java SE 11 = 55,
Java SE 10 = 54,
Java SE 9 = 53,
Java SE 8 = 52,
Java SE 7 = 51,
Java SE 6.0 = 50,
Java SE 5.0 = 49,
JDK 1.4 = 48,
JDK 1.3 = 47,
JDK 1.2 = 46,
JDK 1.1 = 45

(Source: Wikipedia)

To fix the actual problem you should try to either run the Java code with a newer version of Java JRE or specify the target parameter to the Java compiler to instruct the compiler to create code compatible with earlier Java versions.

For example, in order to generate class files compatible with Java 1.4, use the following command line:

javac -target 1.4 HelloWorld.java

With newer versions of the Java compiler you are likely to get a warning about the bootstrap class path not being set. More information about this error is available in a blog post New javac warning for setting an older source without bootclasspath.

Mark Rotteveel
  • 100,966
  • 191
  • 140
  • 197
Juha Palomäki
  • 26,385
  • 2
  • 38
  • 43
  • 181
    *"The version number shown describe which version if Java was used to compile the code."* **No it does not.** It shows the version of the JRE that the class file is compatible with. Using [cross-compilation options](http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javac.html#crosscomp-options) you can use a 1.7 JDK to compile code with a class version of 1.1 (through 1.7). – Andrew Thompson Jan 10 '13 at 05:31
  • 8
    This is a nice solution for compiling to a previous version from Eclipse directly: http://stackoverflow.com/a/16345710/2091700 – Alphaaa May 23 '13 at 14:03
  • 20
    IN eclipse project=>Proerties=>java compiler; set "the compiler compliance level" to the version according to your jre or jdk. As for me, it's 1.6 for jre 1.6 – Sam Sep 25 '13 at 14:58
  • 6
    This may occur when compiler source is set in non-compliance with currently compiling JRE/JDK. For example i found the below values from eclipse .settings folder, org.eclipse.jdt.core.compiler.compliance=1.7, org.eclipse.jdt.core.compiler.source=1.7, org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7. And my compiler was 1.6.0_32. The problem was resolved after changing the values to 1.6. The issue originated after i copied the project from a different workspace where i was using JDK 1.7 :( – Gana Dec 22 '14 at 06:22
  • On eclipse, right click on the project -> click properties -> click Java Build path on the left panel -> Click Libraries tab -> change the 'JRE System Library' to the right version – Kimchi Man Jan 27 '17 at 19:25
  • Use the following link if you are compiling with maven (to set maven.compiler.source and maven.compiler.target properties): https://maven.apache.org/plugins/maven-compiler-plugin/examples/set-compiler-source-and-target.html – Youness Jun 29 '17 at 18:34
  • I was having this problem when trying to start my Glassfish 4.1.2. So I used `AS_JAVA` variable in `config\asenv.bat` to point to my JDK7 installation instead of 6. And it worked. – Edward Quixote Feb 12 '19 at 16:48
405

java.lang.UnsupportedClassVersionError happens because of a higher JDK during compile time and lower JDK during runtime.

Vivek Kumar Ray
  • 8,323
  • 5
  • 21
  • 28
125

In Eclipse, I just went to menu command Window -> Preferences -> Java -> Compiler and then set "Compiler compliance level" to 1.6.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Cacovsky
  • 2,536
  • 3
  • 23
  • 27
  • 3
    In eclipse, sometime project facets also need to be changed to appropriate java version. – Bilal Mirza Jul 04 '13 at 07:59
  • 6
    Thanks. It's worth noting that setting Eclipse's default execution environment (the JRE that goes on the build path) is a *separate* setting. I had set the JRE but not the compiler compliance level; this fixed it. – wchargin Jan 26 '14 at 01:52
65

Don't worry, I got it solved.

It is actually simple - you need to install BOTH JRE / JDK with the same version.

JRE 6 -> JDK 6

JRE 7 -> JDK 7

And so on.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
ERJAN
  • 23,696
  • 23
  • 72
  • 146
45

This error means you're trying to load a Java "class" file that was compiled with a newer version of Java than you have installed.

For example, your .class file could have been compiled for JDK 7, and you're trying to run it with JDK 6.

So the solution is to either:

  • Upgrade your Java runtime or
  • Recompile the class if you have the source, using your local Java compiler (if you have one).

    javac FileName.java

For developers, this can happen if another developer checks in a .class file, and they've got a newer version of java than you have!

Brad Parks
  • 66,836
  • 64
  • 257
  • 336
25

You are trying to run your program with a Java version that does not support the version in which the code was compiled. So basically you must have compiled your code with a higher version and trying to run it using a lower version.

As you are getting

Unsupported major.minor version 51.0

and version 51.0 corresponds to J2SE 7 you have most probably compiled your code in Java 7 and trying to run it using a lower version. Check what java -version displays. It should be the Java 7 version. If not make appropriate changes in the PATH/JAVA_HOME. Or you can compile with the same version you are trying to run the code. If the configurations are confusing you can always give absolute path /home/user/jdk1.7.0_11/bin/javac and /home/user/jdk1.7.0_11/bin/java.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Aniket Thakur
  • 66,731
  • 38
  • 279
  • 289
21

I had a similar situation on Mac, and the following process worked for me:

In the terminal, type

vi ~/.profile

Then add this line in the file, and save

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk<version>.jdk/Contents/Home

where version is the one on your computer, such as 1.7.0_25.

Exit the editor, then type the following command make it become effective

source ~/.profile 

Then type java -version to check the result

java -version 

What is .profile file?

.profile file is a hidden file. It is an optional file which tells the system which commands to run when the user whose profile file it is logs in. For example, if my username is bruno and there is a .profile file in /Users/bruno/, all of its contents will be executed during the log-in procedure.

Source: http://computers.tutsplus.com/tutorials/speed-up-your-terminal-workflow-with-command-aliases-and-profile--mac-30515

kenorb
  • 155,785
  • 88
  • 678
  • 743
Tony
  • 1,405
  • 3
  • 20
  • 31
18

In Eclipse's menu Window -> Preferences -> Java -> Compiler check also "Configure Project Specific Settings".

If you stil have the error with same Java version: try to delete build folder of your project manually. Then restart Eclipse.

Andreas L.
  • 2,805
  • 23
  • 23
15

You can have some JAR library compiled in Java 7, and you have only Java 6 as Java Runtime. It could happen with some new libraries.

Rio
  • 851
  • 10
  • 5
14

The most common issue is misconfiguration of your JAVA_HOME variable which should point to the right Java Development Kit library, if you've multiple installed.

To find where SDK Java folder is located, run the following commands:

jrunscript -e 'java.lang.System.out.println(java.lang.System.getProperty("java.home"));'

Debian/Ubuntu

To check which java (openjdk) you've installed, check via:

dpkg -l "openjdk*" | grep ^i

or:

update-java-alternatives -l

To change it, use:

update-alternatives --config java

Prefix with sudo if required.

to select the alternative java version.

Or check which are available for install:

apt-cache search ^openjdk

Prefix with sudo if required.

Then you can install, for example:

apt-get install openjdk-7-jre

Prefix with sudo if required.

Fedora, Oracle Linux, Red Hat

Install/upgrade appropriate package via:

yum install java-1.7.0-openjdk java-1.7.0-openjdk-devel

The java-1.7.0-openjdk package contains just the Java Runtime Environment. If you want to develop Java programs then install the java-1.7.0-openjdk-devel package.

BSD

There is an OpenJDK 7 package in the FreeBSD Ports collection called openjdk7 which probably needs to be reconfigured.

See: OpenJDK wiki page.

Windows

Just install appropriate Java SE Development Kit library from the Oracle site or install

Jenkins

If you're experiencing this issue with Jenkins, see:

However selecting the right version of Java (newer) with update-alternatives should work.

kenorb
  • 155,785
  • 88
  • 678
  • 743
13

I got the same problem with a project written in 1.7 and tried to execute in 1.6.

My solution in Eclipse:

  • Right click on your Project Properties -> Java Build Path -> Libraries

  • Select your JRE System Library and click Edit on the right, and choose the target JRE.

  • Now go to Java Compiler on the left, and change the Compiler compliance level to your target.

That worked for me.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Ben
  • 133
  • 1
  • 4
  • You told the solution very simple. It worked me . Great. Thank you so much.For every project we need to do same settings again and again. Is there any permanent solution?? – Ravi Mar 22 '22 at 15:21
12

I have faced the same problem when I was working with an Ant script to build my application.

I use Eclipse for my application development, and I changed the compiler version in build properties of the project. But that didn't work for me. Then I found out that I can provide the compiler version in the Ant script.

I modified the Ant script at the section where it compile Java files.

<target name="build-java" depends="prepare-build">
    <echo message="Compiling java files"/>
    <javac ....
           target="1.5"...
    </javac>
</target>

This worked for me to resolve the unsupported major minor issue.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Mandar Pandit
  • 2,171
  • 5
  • 36
  • 58
12

When I installed JDK 1.7, the problem got solved.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
user3168034
  • 121
  • 1
  • 2
11

As answered elsewhere by several people, the Java program is being run on an older version of Java than the one it was compiled it for. It needs to be "crosscompiled" for backward compatibility. To put it another way, there is a mismatch between source and target Java versions.

Changing options in Eclipse menus don't answer the original poster, who said he/she is not using Eclipse. On OpenJDK javac version 1.7, you can crosscompile for 1.6 if you use parameters -source and -target, plus provide the rt.jar -file of the target version (that is, the older one) at compile time. If you actually install the 1.6 JRE, you can point to its installation (for example, /usr/lib/jvm/java-6-openjdk-i386/jre/lib/rt.jar on Ubuntu, /usr/jdk/jdk1.6.0_60/jre/lib/rt.jar on SunOS apparently. Sorry, I don't know where it is on a Windows system). Like so:

javac -source 1.6 -target 1.6 -bootclasspath /usr/lib/jvm/java-6-openjdk-i386/jre/lib/rt.jar HelloWorld.java

It looks like you can just download rt.jar from the Internet, and point to it. This is not too elegant though:

javac -source 1.6 -target 1.6 -bootclasspath ./rt.jar HelloWorld.java
CollinD
  • 7,304
  • 2
  • 22
  • 45
Mace Ojala
  • 335
  • 4
  • 9
11

Based on this...

J2SE 8 = 52
J2SE 7 = 51
J2SE 6.0 = 50
J2SE 5.0 = 49
JDK 1.4 = 48
JDK 1.3 = 47
JDK 1.2 = 46
JDK 1.1 = 45

In Eclipse, right click on project in package explorer:

Build Path -> Configure Build Path

Under:

Java Build Path -> Libraries -> Add Library -> JRE System Library -> Installed JREs -> Search.

Add the required JRE by selecting the library in the list available after the search is complete.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Adit Ya
  • 731
  • 1
  • 8
  • 19
10

If you're facing this issue while using Maven, you can compile your code using the plug-in Maven Compiler.

 <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
       .....

UPDATE: set source and target to 1.8, if you are using JDK 8.

Hearen
  • 7,420
  • 4
  • 53
  • 63
Thamme Gowda
  • 11,249
  • 5
  • 50
  • 57
10
  • If you use Maven, set your Java compile level. Open a command line and write java -version for your compile level:

    Enter image description here

  • If you use IntelliJ IDEA, select project → FileSettingsBuild Execution DeploymentCompilerJava Compiler. Then change byte code as 1.7 like this image:

    Enter image description here

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
ethemsulan
  • 2,241
  • 27
  • 19
8

I had the same error message when running Ant from Eclipse, but the other solutions mentioned here didn't solve my problem. The funny thing was that running Ant from the Windows command line was running fine, so it had to be a configuration issue within Eclipse.

It turned out that under Eclipse you can specify the environment that Ant should be running with and this was set as a JRE instead of a JDK.

  • Go to: Run -> External Tools -> External Tools Configurations ...
  • Select the Ant build.xml for your project (if you have multiple projects)
  • Activate the Tab 'JRE'
  • Here was selected 'Separate JRE: jre6'. When I changed this to a JDK from the 1.6 or 1.7 series, the error was gone.
Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
ckielstra
  • 93
  • 1
  • 4
8

You have used a higher version of the JDK to compile and trying to run from a lower version of JDK/JRE.

To check this, see the version information:

javac -version

java -version

They will be different and javac will have a higher version number.

To get around this, run using java from the JDK version or if you have a newer JRE/JDK that will work as well.

which javac will tell you the location, for example, /usr/bin/javac. Just run directly using /usr/bin/java <program>.

OR you can set the environment variable as a permanent solution.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
L Lawliet
  • 2,565
  • 4
  • 26
  • 35
8

How do I fix it?

This error means that the JRE that is being used to execute your class code does not recognise the version of Java used. Usually because the version of Java that generated your class file (i.e. compiled it) is newer.

To fix it, you can either

a) Compile your Java sources with the same, or older, version of the Java compiler as will be used to run it. i.e. install the appropriate JDK.

b) Compile your Java sources with the newer version of the Java compiler but in compatibility mode. i.e. use the -target parameter.

c) Run your compiled classes in a JRE that is the same, or newer, version as the JDK used to compile the classes.

You can check the versions you are currently using with javac -version for the compiler, and java -version for the runtime.

Should I install the JDK, and setup my PATH variable to the JDK instead of JRE?

For compilation, certainly, install and configure the specific JDK that you want.

For runtime, you can use the one that comes with the JDK or a standalone JRE, but regardless, make sure that you have installed the right versions and that you have configured your PATH such that there are no surprises.

What is the difference between the PATH variable in JRE or JDK?

The PATH environment variable tells the command shell where to look for the command you type. When you type java, the command shell interpreter will look through all the locations specified in the PATH variable, from left to right, to find the appropriate java runtime executable to run. If you have multiple versions of Java installed - i.e. you have the java executable in multiple locations specified in the PATH variable, then the first one encountered when going from left to right will be the one that is executed.

The compiler command is javac and only comes with the JDK. The runtime command is java and comes with the JDK and is in the JRE.

It is likely that you have one version (51.0 = Java 7) of javac installed, and you also have the same version of java installed, but that another previous version of java is appearing earlier in the PATH and so is being invoked instead of the one you expect.

Vihung
  • 12,947
  • 16
  • 64
  • 90
6

Today, this error message appeared in our Tomcat 7 on Ubuntu 12.04.2 LTS (Precise Pangolin):

/var/log/tomcat7/localhost.2014-04-08.log:
Apr 8, 2014 9:00:55 AM org.apache.catalina.core.StandardContext filterStart
SEVERE: Exception starting filter struts2
java.lang.UnsupportedClassVersionError: controller/ReqAccept : Unsupported major.minor version 51.0 (unable to load class controller.ReqAccept)

The Struts application is compiled with Java 7.

It turned out, someone uses "service tomcat [stop/start]" to restart Tomcat 7,

$ ps -ef | grep java
tomcat7 31783 1 32 20:13 ? 00:00:03 /usr/lib/jvm/default-java/bin/java...
$ /usr/lib/jvm/default-java/bin/java -version
java version "1.6.0_27"

Which causes the "Unsupported major.minor version 51.0" error.

When we used "/etc/init.d/tomcat7 [stop/start]" to restart Tomcat 7, the problem was solved.

$ ps -ef | grep java
tomcat7 31886 1 80 20:24 ? 00:00:10 /usr/local/java/jdk1.7.0_15/bin/java
$ /usr/local/java/jdk1.7.0_15/bin/java -version
java version "1.7.0_15"

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
oraclesoon
  • 799
  • 8
  • 12
6

Had this problem when I reverted to Java 6 and tried to run classes previously compiled with Java 7. What worked for me was Preferences > java > compiler --> set compliance level to 1.6 and crucially "configure project settings"..

user3534268
  • 61
  • 1
  • 2
6

I solved it. I ran:

JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386

The error is misleading, Unsupported major.minor version 51.0. This gives the impression that version 51 (Java 7) is not supported. And we should use Java 6.

The error should have been:

The current Java version, 50, is unsupported. Use Java version 7 (51:0 and greater) instead.`

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Siddharth
  • 9,349
  • 16
  • 86
  • 148
6

Your Java file is compiled with a different version (higher compiler version) than the version (lower runtime version) you are trying to run it with.

It is basic understanding that classes compiled with lower versions are expected to run in the later higher versions. But the opposite (compiled with higher compiler version and trying to run it with lower runtime version) is quite not possible sometimes.

Hence you are shown this error, when trying to execute your program. Unsupported major.minor version x.x

Q: I have created an application in Java 7, but when my users try to run it they get an Unsupported major.minor version 51.0 error. What does this mean and what can I do about it?

A: If you compile an application using javac in Java 7, the resulting classfiles will have the 51.0 version number. Versions of Java prior to 7 do not recognize this number, so your users will have to upgrade to Java 7 prior to running your application. If you are not using any Java 7 APIs you can try to compile your application using javac -target 1.6 to create a 1.6-compatible classfile. If your application is deployed using webstart you can specify the minimum version required. For more information, see the docs on Java Web Start and JNLP here. This issue will go away once we trigger autoupdate to Java 7 for end-users currently having Java 6 on their desktops. The timeline for this is not yet determined, we want to give developers time to work out any issues between their code and JDK 7 first.

(Source: oracle.com.)

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Manohar
  • 653
  • 1
  • 10
  • 15
5

Oh Mac OS X I was able to solve this problem by setting the JAVA_HOME variable:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_75.jdk/Contents/Home
TomTom
  • 1,994
  • 1
  • 18
  • 10
4

First let's get some basics right...

JRE is a component in NetBeans/Eclipse/standalone that is going to provide you with libraries, JVM, Java plugins & Java web start. Note that it does not provide compliers or debuggers.

JDK is the superset of JRE along with compliers and debuggers.

So when you have your default library as a JRE instead of JDK, you are going to have a nice time importing stuff, but it won't compile.

Instead, set your path to JDK (I use NetBeans, and I set them using netbeans.conf in netbeans/etc/netbeans.conf and change the path).

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Creative_Cimmons
  • 255
  • 1
  • 2
  • 11
4

In my case the problem was in the server runtime configuration:

Server Runtime Environment

Check the JRE is the version you need:

enter image description here

The project was in version 1.7 and the server JRE was set as 1.6, after changing to the proper java version it's launched fine.

Hearen
  • 7,420
  • 4
  • 53
  • 63
Mike-Bell
  • 951
  • 1
  • 11
  • 25
  • Thanks! Your answer really helped me since i changed the server configurations in a different place but the problem still occured; following your answer resolved the problem. The way i changed the configurations was the following: 1) open the server overview on Eclipse 2) open Launch configuration 3) go to tab classpath 4) added bootsrap and user entries for the new JRE/JDK 5) removed the old entries 6) applied and close. I hope it could help someone to avoid this kind of error – P. Vucinic Jul 21 '20 at 13:41
3

I had the problem whereby I was having to run a Maven compilation on my project from the command line in order to run my unit tests; if I made a change to the test class and let Eclipse automatically recompile it, then I got the "Unsupported major.minor version 51.0" error.

I do have both JDK6 and JDK7 installed, but all my JRE settings were pointing at 1.6, both in the pom and from the project properties page in Eclipse. No amount of Maven Update Project and/or refreshing solved this.

Finally I tried closing the project and re-opening it, and this seemed to fix it! HTH

Matthew Wise
  • 2,639
  • 26
  • 23
3

You have compiled your Java class with JDK 7 and you are trying to run same class on JDK 6 .

Sagar Varpe
  • 3,531
  • 4
  • 27
  • 43
3
  • Install JDK 7.0.55 and set the Java for Eclipse for JDK 7.0.55.
  • Build the project with JDK 7.0.55 by configuring on build path JDK 7.0.55.
  • Set the compiler in Eclipse for JDK 7.0.55 by menu Windows -> Preferences -> Java -> Compiler - choose 1.7.
Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
siddmuk2005
  • 178
  • 2
  • 11
3

The answer is for the problem:

Exception in thread "main" java.lang.UnsupportedClassVersionError: edu/stevens/cs549/dhts/main/LocalContext : Unsupported major.minor version 52.0

I was having the same problem. For those who were having this trouble in AWS ec2 instances, and have somehow got redirected here to this question. I am answering for those, and would like to share that how I did it. I was having the trouble because Amazon EC2 instances were running java version 1.7 and maybe my project was not compatible with it because I was using Maven and it kind of preconfigured for java 1.8. So I installed new version of java:

sudo yum -y install java-1.8.0

And then the important step is to remove the older version:

sudo yum remove java-1.7.0-openjdk

Remember to delete it after installing the new version, else it would continuously be using the same older version and I hope it resolves your problem, which did in my case.

Siddharth Choudhary
  • 1,069
  • 1
  • 15
  • 20
3

Since java 9 -target is replaced by --release.

Till java 11, the available numbers for --release are 6 7, 8, 9, 10, 11.
And you can guess the future versions will be 12, 13, and go on.

To compile for an older target jvm, using javac --release 7 Tmp.java // this will generate .class file that could run on jvm >= 7,

Then you can check the target version via:

javap -v Tmp | grep version

in the output, major version identify the target jvm version.

  • 55 -> java 11
  • 54 -> java 10
  • 53 -> java 9
  • 52 -> java 8
  • 51 -> java 7
  • 50 -> java 6

Future version will remove more older versions:

  • As of java 11, major versions <= 49 (java version <= 5), are not supported.
  • As of java 12 and 13, major versions <= 50 (java version <=6), are not supported.

You can find out which target versions are support by current javac, via command:
javac -help | grep releases

Hearen
  • 7,420
  • 4
  • 53
  • 63
Eric
  • 22,183
  • 20
  • 145
  • 196
1

Yet another way to fix this on Mac OS X with Homebrew installed, is this:

brew install Caskroom/cask/java
Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
webtweakers
  • 715
  • 7
  • 19
1

I have faced the same problem, and I fixed it in Linux.

Check your $JAVA_HOME

Need JDK 1.8 to compile/build APK

Install Java JDK 1.8 and change the JAVA_HOME

Edit ~/.bashrc and add your JDK 1.8 path as JAVA_HOME.

export JAVA_HOME=/usr/lib/jvm/java-8-oracle/jre/

And source ~/.bashrc

Close the current terminal window/tab and run $JAVA_HOME to check the path.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Mohammed Safeer
  • 20,751
  • 8
  • 75
  • 78
0

I had the same situation but any of above tips didn't help :) In our environment we had tomcat running as a service on Windows. We installed Java 1.7 and set up JAVA_HOME on this version. Off course the sources were built on Java 1.7. Nevertheless the tomcat said that it use previous version of JVM. After a deep analized turn out that the Tomcat service installed on Windows still keeping the old value for JAVA_HOME pointing to Java 1.6. After installing new Tomcat service everything were resolved. So the conclusion is: When you change java version and tomcat running as a service, you have to reinstall tomcat service.

mariusz117
  • 151
  • 1
  • 4
0

I got the same issue with Spring Source Tool (STS) IDE for a Grails project. I checked the installed Java version and the project Java version were 1.7.*. Later I found that in GGTS.ini file the Java version was set to 1.6:

Solution:

-Dosgi.requiredJavaVersion=1.6 changed to
-Dosgi.requiredJavaVersion=1.7
Add below two lines before -vmargs
-vm
jdk1.7.0_21/jre/lib/amd64/server/libjvm.so

Problem solved. Happy coding.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Bhuwan Gautam
  • 1,229
  • 1
  • 11
  • 24
0

Add this to your pom.xml file:

<project ....>
    <properties>
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
    </properties>
</project>

Where 1.7 is the Java version you intend to use. This overwrites the Maven compiler setting, so it's good to debug from here.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
George
  • 6,006
  • 6
  • 48
  • 68
0

I solved this issue for me by checking that Maven Dependencies were being deployed in Deployment Assembly. In my case they were not.

Adding it fixed the problem.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
antonkronaj
  • 1,237
  • 12
  • 13
0

I tried everything. Reinstalling Tomcat is what finally worked. Here's what I've checked before reinstalling.

Make sure your environmental variables look like this.

$ echo $JAVA_HOME
C:\Program Files\Java\jdk1.7.0_51\
$ echo $JRE_HOME
C:\Program Files\Java\jdk1.7.0_51\jre\bin

Make sure Eclipse is using the same jre you set JAVA_HOME to (if JAVA_HOME is not set it will look at JRE_HOME). Window > Prefrences > Java > Installed JREs (the checked one is the default one)

If you made any changes to any of your tomcat files especially catalina.bat or startup.bat, then you may be telling tomcat to look at a different version of java than the one you set to JAVA_HOME C:\Program Files (x86)\Apache\apache-tomcat-7.0.26\bin

Philip Rego
  • 552
  • 4
  • 20
  • 35
  • Unless you describe your particular circumstances, and explain your *why* this worked for you, this suggestion is unhelpful. In general, reinstalling Tomcat won't solve the problem, and it may actually introduce new problems. – Stephen C Sep 19 '21 at 02:38
  • My circumstance was this error `java.lang.UnsupportedClassVersionError` the people will determine wether they find it helpful or not. It solved it for me how could you be sure it can't. – Philip Rego Sep 19 '21 at 03:53
0

you can specify the "target" for the compiler in the build.xml file, if you are using ant, just like below:

 <target name="compile" depends="init">
    <javac executable="${JAVA_HOME}\bin\javac" srcdir="${src.dir}" target="1.6" destdir="${classes.dir}" debug="true"
        deprecation="true" classpathref="compile.classpath" encoding="utf8">
        <include name="**/*.java" />
    </javac>
</target>
StrongYoung
  • 762
  • 1
  • 7
  • 17
0

In my case the problem occured because of different versions of Java in $JAVA_HOME and $PATH.

echo $JAVA_HOME
/usr/lib/jvm/java-7-openjdk-amd64/jre
echo $PATH
/opt/jdk/jdk1.8.0_151/bin:/usr/lib/jvm/java-7-openjdk-amd64/jre/bin:/usr/local/bin:/usr/bin:/bin

Once I updated them to be the same version of Java the problem was gone.

export JAVA_HOME=/opt/jdk/jdk1.8.0_151
export PATH=$JAVA_HOME/bin:$PATH
nurb
  • 325
  • 3
  • 6
0

Many answers refer to IDE's like Eclipse. However, the question relates to native development with Notepad++.

The core reason of the named error is a mismatch of the used Java Runtime Environment and used classes respectively libraries. The goal of the following descriptions is to compile without any additional installation.

1) Check the definition in the PATH variable. If there is defined:

C:\Program Files (x86)\Common Files\Oracle\Java\javapath

and/or

C:\ProgramData\Oracle\Java\javapath

These paths link to java/javac with a fixed java version. You can check this versions in this folder with javac -version. Result can be:

java version "1.8.0_231"

This means, Java version 8 is in use. Replace this entries with %JAVA_HOME%\bin. If the JDK's was installed manually, check whether JAVA_HOME is set in the environment. If not, add it, here e.g. with:

JAVA_HOME="C:\Program Files\Java\jdk1.7.0_80"

2) I have build the project on command-line with gradle. In build.gradle was defined:

android {
    buildToolsVersion "24.0.1"
    dependencies {
        compile 'com.android.support:design:23.0.1'
        compile 'com.android.support:support-v4:23.0.1'
        ...
    }
    ...
}

The used build-tools dx-files are newer then other components. Therefore a modification is required:

buildToolsVersion "23.0.1"

gotwo
  • 663
  • 8
  • 16
0

If someone is using Gradle, then put this in build.gradle

java {
    sourceCompatibility = JavaVersion.VERSION_1_7
    targetCompatibility = JavaVersion.VERSION_1_7
}

We are telling the compiler to enable the byte code to be compatable with version java 7(java version in which i want to run the class) in the above case.

seenukarthi
  • 8,241
  • 10
  • 47
  • 68
sudarshan
  • 58
  • 7
0

// in windows

1 - I installed jre and jdk with the same version ( in the installation process ask me to delete the other version and I approved it)

2- check my path in EDIT THE ENV VARIABLES in windows and then close and open ide again

3- all things worked good

saber tabatabaee yazdi
  • 4,404
  • 3
  • 42
  • 58
-1

I got the same problem, and I fixed this issue by this solution on a Mac. I hope it helps someone. It's because the system doesn't know about the newer version of JDK, and it still points to the old JDK.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Dilip Rajkumar
  • 7,006
  • 6
  • 60
  • 76
-1

If you have a second project added to your build path make sure it has the same compiler version as your first one: Properties -> Java Compiler -> Compiler compliance level

Luigi04
  • 437
  • 5
  • 14
-1

I'm using OS X v10.11.5 (El Capitan), and I tried setting JAVA_HOME and forcing the "correct" Java version via Maven. Nothing helped.

The problem happened when the OS X account was logged out while the application was still running. After logging in again, OS X opened the old terminal session with greyed-out history. I used the same terminal session to build the project, but failed with the unsupported class version error.

Cleaning the Maven project didn't help at all.

To solve the problem, I simply had to close the auto-opened terminal window and use a new one.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
lilalinux
  • 2,903
  • 3
  • 43
  • 53
-1
  1. Click Properties in a project.
  2. Go to Java Build Path.
  3. Click Add Library.
  4. Click Next on JRE System Library. Select the one you need if not selected by default.
  5. Click Finish.

You're done!

AmazingDayToday
  • 3,724
  • 14
  • 35
  • 67
-1

For me, I was getting this error on the com/sun/javadoc/Doclet class. After some digging, I found that I accidentally copied the tools.jar from Java 8 into my Java 7 folder.

Finding the tools.jar for Java 7 and putting it back into the folder fixed my issue. So something to try.

snowfi6916
  • 697
  • 4
  • 9
  • 21
-1

make sure you check Environment variables versions of java , it could be just the difference between the versions of JAVA_HOME (JDK path) and JRE_HOME (JRE path) , that cause the problem

Seif Tml
  • 2,413
  • 1
  • 17
  • 15
-1

As you know it is always good practice to have enviornment variable Java_home for jdk(Java development Kit) bin directory.

looking at your issue above this seems that JRE- runtime environment is looking for a class which is not compatible in Superset library of JDk. I would recommend have a completed package of JDK and JRE or Jboss(if required) from Oracle download source directly to avoid any such issues.