What does 'Unsupported major.minor version 52.0' mean, and how do I fix it?
本问题已经有最佳答案,请猛点这里访问。
OK,所以我松散地理解52是Java 8,并且异常意味着一些代码是用Java的一个版本编译的,有些则是用另一个版本编译的。我脑子里想不出来的是它的方向。
下面是我得到的堆栈跟踪:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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,但我似乎无法修复它。
错误是说类"ValueFi工厂"是用Java 8编译的,还是我的代码已经编译过?我尝试将我的遵从性级别更改为1.6、1.7和1.8,但这两个级别都没有解决问题。
您不需要在这里更改合规性级别,或者更确切地说,您应该更改,但这不是问题所在。
代码遵从性确保您的代码与给定的Java版本兼容。
例如,如果你有一个针对Java 6的代码遵从性,你就不能使用Java 7或8的新语法特征(例如,菱形、lambdas等)。
这里的实际问题是,您试图在Java版本中编译看起来与类路径中的项目依赖性不同的东西。
相反,您应该检查您用来构建的JDK/JRE。
在Eclipse中,打开项目属性并在Java构建路径中检查选定的JRE。
如果您使用的是定制的Ant(等)脚本,那么您还需要看一看,以防上述内容本身不够。
您的代码是用Java 8编译的。
要么用旧的JDK(遵从级别)编译代码,要么在Java 8 JRE上运行它。
希望这有帮助…
实际上,您有一个针对更高的JDK(在您的例子中是JDK 1.8)编译的代码,但是在运行时,您提供的是较低的JRE(JRE 7或更低)。
可以通过在编译时添加目标参数来解决此问题。例如,如果运行时目标是1.7,则应使用1.7或更低版本。
1 | javac -target 1.7 *.java |
如果您使用Eclipse,可以在窗口>首选项> java>编译器> >设置"编译器遵从级别"=选择运行时JRE版本或更低。