在没有意义的 Eclipse JPA 项目中获取 UnsupportedClassVersionError

Getting UnsupportedClassVersionError in Eclipse JPA project which does not make sense

我这里有一个奇怪的情况。当我到处使用 Java 1.6 时,我收到有关 Java 1.7 的错误。

我正在使用 Eclipse Kepler 32 位
我使用的 JPA 实现是 EclipseLink 2.6.0.

在 Window --> Preferences --> Java --> Installed JREs 中,我检查了 jdk1.6.0_34 (默认),它的位置是 C:\Program Files (x86)\Java\jdk1.6.0_34。这是打印屏幕:

我创建了一个新的 JPA 项目。在目标运行时间我选择了jdk1.6.0_34。这是打印屏幕:

我单击“配置”部分中的“修改...”按钮以确认我正在使用 Java 1.6。这是打印屏幕:

然后我创建了一个简单的 class 来测试 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();
    }
}

当我 运行 它时,我收到一条错误消息:

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[=11=]0(URLClassLoader.java:58)
    at java.net.URLClassLoader.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)

这很奇怪。我到处都在使用 Java 1.6,但 Eclipse 给我这个关于 Java 1.7 的错误消息。可能是什么原因?

这意味着您正在使用的某些插件是使用 java 1.7 构建的,它需要 1.7 或更高版本的 jre。检查包含堆栈跟踪中提到的 class 的插件。