UnsupportedClassVersionError - JDK具有相同的版本

时间:2013-09-11 08:25:33

标签: java compiler-construction

我已经使用现有的旧Java代码库并更改了一个类。我已经在Java 1.5.0中重新编译了代码库。然后,我在Tomcat上成功部署了此代码。

为了测试我的部署,我向我的应用程序发送了一条消息,并且在我更改的类中遇到错误。

  

为定义名称为'myClass'的bean加载类[com.MyClass]时出错   在ServletContext资源[/WEB-INF/ApplicationContext.xml]:问题   与类文件或依赖类;嵌套异常是   java.lang.UnsupportedClassVersionError :( com / MyClass)坏主要   版本在偏移= 6

我已经检查了部署的Ear和War的清单文件,两者都有1.5.0_22-b03。 Tomcat实例上的版本是1.5.0。

有谁能告诉我为什么我收到这个错误?运行应用程序的JDK与编译代码的版本相同。

奇怪的是,唯一有错误的类是我修改过的类。

4 个答案:

答案 0 :(得分:1)

您已使用Java 6编译了您的类,并使用较低版本(即Java 5)部署应用程序。使用Java 6运行时它将解决您的问题。

“引起:java.lang.UnsupportedClassVersionError:( myclassname )错误的主要版本在偏移= 6”

此错误表示您的项目是使用比运行时可支持的更高级别的Java编译器编译的。

答案 1 :(得分:0)

似乎您已经使用比1.5更高的Java版本编译了代码。您应该检查是否安装了正确的JRE(Window - > Preferences - > Java - > Installed JREs)。

您还应该检查编译器合规性级别是否设置为1.5(Window - > Preferences - > Java - > Compiler)。

我假设您正在使用Eclipse ...

答案 2 :(得分:0)

我猜你已经用java版本6编译了,请重新检查

答案 3 :(得分:0)

由于你可能从命令行,ant或maven间接运行java,它依赖于他们的java,javac和build脚本以及其中的变量。 Maven并不复杂;在Ant中你可以回应java版本,如果有很多包含的话。

要检查.class文件,请尝试以下操作。它是Java 7,但很容易翻译成早期版本。

private static void dumpJavaClassVersion(String path) throws IOException {
    File file = new File(path);
    try (InputStream in = new FileInputStream(file)) {
        byte[] header = new byte[8];
        int nread = in.read(header);
        if (nread != header.length) {
            System.err.printf("Only %d bytes read%n", nread);
            return;
        }
        if (header[0] != (byte)0xCA || header[1] != (byte)0xFE
                || header[2] != (byte)0xBA || header[3] != (byte)0xBE) {
            System.err.printf("Not a .class file (CAFE BABE): %02X%02X %02X%02X",
                    header[0], header[1], header[2], header[3]);
            return;
        }
        int minorVs = ((header[4] & 0xFF) << 8) | (header[5] & 0xFF);
        int majorVs = ((header[4] & 0xFF) << 8) | (header[5] & 0xFF);
        final String[] versionsFrom45 = {"1.1", "1.2", "1.3", "1.4", "5", "6", "7", "8", "9", "10"};
        int majorIx = majorVs - 45;
        String majorRepr = majorIx < 0 || majorIx >= versionsFrom45.length ? "?" : versionsFrom45[majorIx];
        System.out.printf("Version %s, internal: minor %d, major %d%n",
                majorRepr, minorVs, majorVs);

    }
}