Search code examples
javaeclipsejpajava-7java-6

Getting UnsupportedClassVersionError in Eclipse JPA project which does not make sense


I have a weird situation here. I am getting an error about Java 1.7 when I am using Java 1.6 everywhere.

I am using Eclipse Kepler 32-bit.
The JPA implementation I am using is EclipseLink 2.6.0.

In Window --> Preferences --> Java --> Installed JREs, I have jdk1.6.0_34 (default) checked and its location is C:\Program Files (x86)\Java\jdk1.6.0_34. This is the print screen:

Eclipse Preferences Installed JREs Window

I create a new JPA Project. In Target runtime I selected jdk1.6.0_34. This is the print screen:

Eclipse New JPA Project Window

I click on Modify... button in Configuration section to confirm I am working on Java 1.6. This is the print screen:

Eclipse Project Facets Window

I then created a simple class to test JPA:

package com.test;

import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class TestJPA {
    public static void main(String[] args) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("MyTestJpaProject");
        emf.close();
    }
}

When I run it I got an error message:

Exception in thread "main" java.lang.UnsupportedClassVersionError: org/eclipse/persistence/jpa/PersistenceProvider : Unsupported major.minor version 51.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    at javax.persistence.spi.PersistenceProviderResolverHolder$DefaultPersistenceProviderResolver.getPersistenceProviders(PersistenceProviderResolverHolder.java:117)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:76)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54)
    at com.test.TestJPA.main(TestJPA.java:16)

This is strange. I am using Java 1.6 everywhere yet Eclipse is giving me this error message about Java 1.7. What could be the reason?


Solution

  • This means that some plugin you are using was built using java 1.7 and it would require 1.7 or greater jre. Check the plugin which contains the class mentioned in the stack trace.