0

我采用了现有的旧 Java 代码库并更改了一个类。我在 Java 1.5.0 中重新编译了代码库。然后我成功地在 Tomcat 上部署了这段代码。

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

为 ServletContext 资源 [/WEB-INF/ApplicationContext.xml] 中定义的名称为“myClass”的 bean 加载类 [com.MyClass] 时出错:类文件或依赖类有问题;嵌套异常是 java.lang.UnsupportedClassVersionError: (com/MyClass) bad major version at offset=6

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

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

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

4

4 回答 4

1
于 2013-09-11T09:17:10.137 回答
0

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

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

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

于 2013-09-11T08:28:11.630 回答
0

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

于 2013-09-11T08:30:36.187 回答
0

由于您可能从命令行、ant 或 maven 间接运行 java,这取决于它们的 java、javac 和构建脚本以及其中的变量。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);

    }
}
于 2013-09-11T09:19:45.897 回答