'不支持的major.minor版本52.0'是什么意思,我该如何解决?

时间:2016-06-03 10:33:05

标签: java eclipse version

好的,所以我松散地理解52.0是Java 8,并且异常意味着某些代码是用一个版本的java编译的,而另一些代码是用另一个版本编译的。我无法理解的是它的方向是什么。

这是我得到的堆栈跟踪:

Exception in thread "main" java.lang.UnsupportedClassVersionError: org/openrdf/model/ValueFactory : Unsupported major.minor version 52.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2615)
    at java.lang.Class.getMethod0(Class.java:2856)
    at java.lang.Class.getMethod(Class.java:1668)
    at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494)
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486)

我正在从eclipse执行我的代码,它在到达main之前崩溃了。我在这里发了几篇帖子说要改变我的合规水平/我的JRE,但我似乎无法解决它。

错误是说'ValueFactory'类是用java 8编译的,还是我的代码有?我已经尝试将我的合规性级别更改为1.6,1.7和1.8,但这些都没有解决问题。

3 个答案:

答案 0 :(得分:14)

您不需要 来更改合规性级别,或者更确切地说,您应该这样做,但这不是问题。

代码合规性可确保您的代码与给定的Java版本兼容。

例如,如果您有针对Java 6的代码合规性,则不能使用Java 7或8的新语法功能(例如钻石,lambdas等)。

这里的实际问题是你试图在Java版本中编译一些看起来与类路径中的项目依赖项不同的东西。

相反,您应该检查您正在构建的JDK / JRE。

在Eclipse中,打开项目属性并在Java构建路径中检查选定的JRE。

如果您正在使用自定义Ant(等)脚本,您还需要查看一下,以防上述内容本身不足。

答案 1 :(得分:8)

您的代码是使用Java 8编译的。

使用较旧的JDK(合规级别)编译代码或在Java 8 JRE上运行代码。

希望这会有所帮助......

答案 2 :(得分:5)

实际上你有一个针对更高JDK(在你的情况下是JDK 1.8)编译的代码,但是在运行时你提供的是更低的JRE(JRE 7或更低)。

您可以通过在编译时添加目标参数来解决此问题 例如如果运行时目标是1.7,则应使用1.7或更低

javac -target 1.7 *.java

如果您使用的是eclipse,则可以在此处发送此参数 窗口 - >偏好 - > Java - >编译器 - >设置“编译器合规性级别”=选择运行时jre版本或更低版本。

相关问题