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

好吧,我松散地理解52.0是Java 8,并且exception意味着某些代码是用一个版本的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之前崩溃了。 我在这里发了几篇post说要改变我的合规水平/我的JRE,但我似乎无法解决这个问题。

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

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

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

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

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

相反,您应该检查您用于构建的JDK / JRE。

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

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

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

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

希望这可以帮助…

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

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

 javac -target 1.7 *.java 

如果你正在使用eclipse,你可以在Window – > Preferences – > Java – > Compiler – > set“Compiler compliance level”中输入这个参数=选择你的运行时jre版本或更低版本。