Reputation: 24510
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)
...
More recent versions of Java produce a more detailed exception message:
java.lang.UnsupportedClassVersionError: com/xxx/yyy/Application has been compiled by a more recent version of the Java Runtime (class file version 65.0), this version of the Java Runtime only recognizes class file versions up to 61.0
I think the problem here is about versions; some versions of Java may be old or too new.
PATH
variable in JRE or JDK?Upvotes: 1757
Views: 2410280
Reputation: 27052
The version number shown describes the version of the JRE the class file is compatible with.
The reported major numbers are:
Java SE 23 = 67,
Java SE 22 = 66,
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.
Upvotes: 2162
Reputation: 2933
In Eclipse's menu Window -> Preferences -> Java -> Compiler check also "Configure Project Specific Settings".
If you still have the error with same Java version: try to delete build folder of your project manually. Then restart Eclipse.
Upvotes: 18
Reputation: 761
I was facing java.lang.UnsupportedClassVersionError: org/eclipse/jdt/internal/compiler/Compiler has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 55.0: during upgrading jdk1.8 to jdk11, my Junit tests cases were failing due to reading xml.
The issue got resolved after added below jars to my application which was using java 11:
<dependency>
<groupId>org.eclipse.jdt</groupId>
<artifactId>org.eclipse.jdt.core</artifactId>
<version>3.30.0</version>
<scope>test</scope>
</dependency>
You can find correct version here for other jdk: Maven
Upvotes: 0
Reputation: 4959
// 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
Upvotes: 0
Reputation: 68
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.
Upvotes: 1
Reputation: 870
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"
Upvotes: 1
Reputation: 333
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
Upvotes: 0
Reputation: 40
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.
Upvotes: -1
Reputation: 11957
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.
Upvotes: 10
Reputation: 24974
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.
Future version will remove more older versions:
You can find out which target versions are support by current javac, via command:
javac -help | grep releases
Upvotes: 3
Reputation: 969
In my case the problem was in the server runtime configuration:
Check the JRE is the version you need:
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.
Upvotes: 4
Reputation: 2423
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
Upvotes: -1
Reputation: 1129
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.
Upvotes: 3
Reputation: 772
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>
Upvotes: 0
Reputation: 166795
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"));'
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.
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 thejava-1.7.0-openjdk-devel
package.
There is an OpenJDK 7 package in the FreeBSD Ports collection called openjdk7 which probably needs to be reconfigured.
See: OpenJDK wiki page.
Just install appropriate Java SE Development Kit library from the Oracle site or install
If you're experiencing this issue with Jenkins, see:
However selecting the right version of Java (newer) with update-alternatives
should work.
Upvotes: 14
Reputation: 648
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
Upvotes: 0
Reputation: 21545
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.
Upvotes: 1
Reputation: 673
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.)
Upvotes: 6
Reputation: 3031
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.
Upvotes: -1
Reputation: 2309
If you use Maven, set your Java compile level. Open a command line and write java -version
for your compile level:
If you use IntelliJ IDEA, select project → File → Settings → Build Execution Deployment → Compiler → Java Compiler. Then change byte code as 1.7 like this image:
Upvotes: 10
Reputation: 1377
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.
Upvotes: 0
Reputation: 6104
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.
Upvotes: 0
Reputation: 745
Yet another way to fix this on Mac OS X with Homebrew installed, is this:
brew install Caskroom/cask/java
Upvotes: 1
Reputation: 1269
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.
Upvotes: 0
Reputation: 699
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.
Upvotes: -1
Reputation: 13407
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.
Upvotes: 8
Reputation: 4282
You're done!
Upvotes: -1
Reputation: 457
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
Upvotes: -1
Reputation: 355
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
Upvotes: 11
Reputation: 2014
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
Upvotes: 5