好的,所以我松散地理解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,但这些都没有解决问题。
答案 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版本或更低版本。