不支持的 Major. small 版本51.0

我正在尝试构建一个应用程序,但是出现了一些错误。我的 JDK 版本如下:

java version "1.6.0_30"
Java(TM) SE Runtime Environment (build 1.6.0_30-b12)
Java HotSpot(TM) Client VM (build 20.5-b03, mixed mode, sharing)

这是我的错误记录:

Buildfile: build.xml


compile:
[echo] Compiling the service....
[echo]   ...mkdir for classes first....
[echo]   ...java classes next....
[echo]   ...mkdir for generated code next....
[echo]  ...generate stubs/skeletons next....
[wscompile] command line: wscompile -d /home/vivekray/program/MTrans/WEB-INF/classes -features:wsi,documentliteral -gen:server -keep -model /home/vivekray/program/MTrans/WEB-INF/model.gz -verbose -Xprintstacktrace /home/vivekray/program/MTrans/src/config.xml -classpath /home/vivekray/program/MTrans/WEB-INF:/home/vivekray/program/MTrans/WEB-INF/classes:/home/vivekray/program/MTrans/lib/log4j-1.2.16.jar:/home/vivekray/jwsdp-2.0/jwsdp-shared/lib/mail.jar:/home/vivekray/jwsdp-2.0/jwsdp-shared/lib/activation.jar:/home/vivekray/jwsdp-2.0/jaxp/lib/jaxp-api.jar:/home/vivekray/jwsdp-2.0/jaxp/lib/endorsed/dom.jar:/home/vivekray/jwsdp-2.0/jaxp/lib/endorsed/sax.jar:/home/vivekray/jwsdp-2.0/jaxp/lib/endorsed/xalan.jar:/home/vivekray/jwsdp-2.0/jaxp/lib/endorsed/xercesImpl.jar:/home/vivekray/jwsdp-2.0/jaxrpc/lib/jaxrpc-api.jar:/home/vivekray/jwsdp-2.0/jaxrpc/lib/jaxrpc-spi.jar:/home/vivekray/jwsdp-2.0/jaxrpc/lib/jaxrpc-impl.jar:/home/vivekray/jwsdp-2.0/saaj/lib/saaj-api.jar:/home/vivekray/jwsdp-2.0/saaj/lib/saaj-impl.jar:/home/vivekray/jwsdp-2.0/jwsdp-shared/lib/relaxngDatatype.jar:/home/vivekray/jwsdp-2.0/jwsdp-shared/lib/xsdlib.jar:/home/vivekray/jwsdp-2.0/jwsdp-shared/lib/jax-qname.jar:/home/vivekray/jwsdp-2.0/apache-ant/lib/ant.jar:/home/vivekray/jwsdp-2.0/fastinfoset/lib/FastInfoset.jar:/home/vivekray/Softwares/apache-tomcat-7.0.27/lib/servlet-api.jar
[wscompile] [creating model: mtransservice]
[wscompile] [creating service: Mtransservice]


BUILD FAILED
java.lang.UnsupportedClassVersionError: in/cdac/mobile/computing/mtrans/MtransService : 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 org.apache.tools.ant.AntClassLoader.defineClassFromData(AntClassLoader.java:1146)
at org.apache.tools.ant.AntClassLoader.getClassFromStream(AntClassLoader.java:1324)
at org.apache.tools.ant.AntClassLoader.findClassInComponents(AntClassLoader.java:1388)
at org.apache.tools.ant.AntClassLoader.findClass(AntClassLoader.java:1341)
at org.apache.tools.ant.AntClassLoader.loadClass(AntClassLoader.java:1088)
at java.lang.ClassLoader.loadClass(ClassLoader.java:295)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at com.sun.xml.rpc.processor.modeler.rmi.RmiUtils.getLoadableClassName(RmiUtils.java:78)
at com.sun.xml.rpc.processor.modeler.rmi.RmiUtils.getRealName(RmiUtils.java:54)
at com.sun.xml.rpc.processor.modeler.rmi.RmiModeler.modelPort(RmiModeler.java:676)
at com.sun.xml.rpc.processor.modeler.rmi.RmiModeler.buildLiteralModel(RmiModeler.java:603)
at com.sun.xml.rpc.processor.modeler.rmi.RmiModeler.buildModel(RmiModeler.java:457)
at com.sun.xml.rpc.processor.config.ModelInfo.buildModel(ModelInfo.java:88)
at com.sun.xml.rpc.processor.Processor.runModeler(Processor.java:63)
at com.sun.xml.rpc.tools.wscompile.CompileTool.run(CompileTool.java:714)
at com.sun.xml.rpc.util.ToolBase.run(ToolBase.java:43)
at com.sun.xml.rpc.tools.ant.Wscompile.execute(Wscompile.java:746)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.Target.execute(Target.java:357)
at org.apache.tools.ant.Target.performTasks(Target.java:385)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1337)
at org.apache.tools.ant.Project.executeTarget(Project.java:1306)
at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
at org.apache.tools.ant.Project.executeTargets(Project.java:1189)
at org.apache.tools.ant.Main.runBuild(Main.java:758)
at org.apache.tools.ant.Main.startAnt(Main.java:217)
at org.apache.tools.ant.launch.Launcher.run(Launcher.java:257)
at org.apache.tools.ant.launch.Launcher.main(Launcher.java:104)


Total time: 1 second
310252 次浏览

发生 java.lang.UnsupportedClassVersionError是因为编译时 JDK 较高,运行时 JDK 较低。

下面是一些版本:

Java SE 9 = 53,
Java SE 8 = 52,
Java SE 7 = 51,
Java SE 6.0 = 50,
Java SE 5.0 = 49,
JDK 1.4 = 48,
JDK 1.3 = 47,
JDK 1.2 = 46,
JDK 1.1 = 45

这意味着在 特定的 JDK下编译类,然后尝试在 JDK 的 旧版本下运行它们。

版本51是 Java7,您可能使用了错误的 JDK。

正如这里提到的,在二进制兼容性下

确保在编译/运行时使用正确的 SDK,并且确保使用 source/target 1.7。

这些人给了你失败的原因,却没有告诉你如何解决。这个问题可能会出现,即使你有一个 jdk 匹配 JVM,你正在尝试它。

项目-> 属性-> Java 编译器

启用项目特定设置。

然后选择编译器遵从级别为1.6或1.5,构建并测试您的应用程序。

现在应该没事了。

我遇到了同样的问题,当使用 jdk 1.7编译时,使用 jre 1.4执行。

我的解决方案是通过在现有 PATH 设置之前添加路径名 C: glassfish 3 jdk7 bin 来设置环境变量 PATH。更新后的值是“ C: glassfish 3 jdk7 bin; C: Sun SDK bin”。更新之后,问题就解决了。

使用 Maven 并使用 Maven-编译器-插件显式调用实际正确的版本 JDK javac.exe 命令,因为 Maven 可以运行任何版本; 这也会捕获 Javac 中真正愚蠢的长期存在的 bug,在为早期 java 版本编译时没有发现运行时中断类版本的 jar 和缺少类/方法/属性!在 Java 1.5 + 中,通过向新类、方法和属性添加版本控制属性,或者单独的编译器版本控制数据,后面的部分可以很容易地修复,Sun 和 Oracle 的一个相当愚蠢的疏忽也是如此。