UnsupportedClassVersionError - JDK 具有相同版本

问题描述 投票:0回答:4

我采用了现有的旧 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 与编译代码的版本相同。

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

java tomcat
4个回答
1
投票

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

“由以下原因引起:java.lang.UnsupportedClassVersionError:(myclassname)偏移量 = 6 处的主要版本错误”

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


0
投票

看来您使用高于 1.5 的 Java 版本编译了代码。您应该检查是否安装了正确的 JRE (

Window
->
Preferences
->
Java
->
Installed JREs
)。

您还应该检查编译器合规级别是否设置为 1.5 (

Window
->
Preferences
->
Java
->
Compiler
)。

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


0
投票

我猜你是用java版本6编译的,请重新检查


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);

    }
}
© www.soinside.com 2019 - 2024. All rights reserved.