【问题标题】:java.lang.UnsupportedClassVersionError Unsupported major.minor version 51.0 [duplicate]java.lang.UnsupportedClassVersionError 不支持的major.minor 51.0版[重复]
【发布时间】:2012-06-29 15:29:06
【问题描述】:

我正在尝试构建一个应用程序,但它给出了一些错误。我的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

【问题讨论】:

    标签: java jdk1.6 unsupported-class-version


    【解决方案1】:

    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
    

    【讨论】:

    • 在 Eclipse 中,您可能会无意中覆盖具有特定合规级别的本地包属性(鼠标右键单击->属性->Java 编译器)。当您更改本地设置(窗口 -> 首选项)时,这些捆绑包不会自动“降级”。当您将捆绑包更改为在合规级别较低的生产环境中工作时,有时可能会发生这种情况。
    【解决方案2】:

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

    【讨论】:

    • -1。 OP 没有使用 Maven,并且针对这个问题更改整个工具集似乎有点过头了。 Maven 可能很棒,恕我直言,这个答案离题了。
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

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

      启用项目特定设置。

      然后选择 Compiler Compliance Level 为 1.6 或 1.5,构建并测试您的应用。

      现在应该没问题了。

      【讨论】:

      • 你真是个天才。所有其他答案仅指解释问题。没有描述如何解决这个问题
      • 老实人..谢谢。我已将您的答案指向关于 SO 的类似问题,其中没有答案能像您的答案那样接近解决问题。
      • 祝福你展示了这些步骤。愿 Delibird 今年给你礼物。
      • 在我的例子中,服务器使用 java 1.6 运行,但 maven 使用 1.7。您可以反过来更改服务器运行时。无论如何,非常有帮助的答案!
      • 这应该是公认的答案。
      【解决方案5】:

      确保在编译/运行时使用正确的 SDK,并且确保使用源/目标 1.7。

      【讨论】:

        【解决方案6】:

        版本 51 是 Java 7,您可能使用了错误的 JDK。检查 JAVA_HOME。

        As mentioned here, under Binary Compatibility

        【讨论】:

          【解决方案7】:

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

          【讨论】:

          • 但我只使用 jdk-6.30 并且同一应用程序中的另外一件事在其他系统中的 jdk-6.30 上运行良好。
          猜你喜欢
          • 2014-03-17
          • 2012-10-10
          • 2016-01-10
          • 2013-02-02
          • 2012-08-15
          • 2014-01-08
          • 1970-01-01
          • 2012-12-21
          相关资源
          最近更新 更多