You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java版本不兼容报错:class文件版本55.0需改为52.0(Maven+Eclipse)

Java版本不兼容问题:UnsupportedClassVersionError(class文件版本55.0 vs 52.0)

问题描述

系统未安装Java 11,环境变量、Eclipse构建路径、Eclipse Java编译器级别均设置为Java 8,但编译运行时出现错误:class文件版本为55.0,应为52.0。此前升级Chrome至122版本后,同步更新了Selenium到4.17.0、WebDriver到5.6.3以保证兼容性,当前抛出java.lang.UnsupportedClassVersionError错误。

错误栈信息

java.lang.UnsupportedClassVersionError: testrunners/MyTestRunner has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.loadClass(RemoteTestRunner.java:766)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.loadClasses(RemoteTestRunner.java:490)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:513)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:756)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:452)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:210)

错误截图

错误截图

POM.xml配置

<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>HybridFramework1</groupId>
    <artifactId>HybridFramework1</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>11</java.version>
        <junit.version>4.13.1</junit.version>
        <cucumber.version>6.9.0</cucumber.version>
        <maven.compiler.version>3.8.1</maven.compiler.version>
        <maven.surefire.version>2.22.2</maven.surefire.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-java</artifactId>
            <version>${cucumber.version}</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-junit</artifactId>
            <version>${cucumber.version}</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>4.18.1</version>
        </dependency>

        <dependency>
            <groupId>io.github.bonigarcia</groupId>
            <artifactId>webdrivermanager</artifactId>
            <version>5.6.3</version>
        </dependency>

        <dependency>
            <groupId>tech.grasshopper</groupId>
            <artifactId>extentreports-cucumber6-adapter</artifactId>
            <version>2.8.0</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>6.14.3</version>
            <!--    <scope>test</scope> -->
        </dependency>

        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-testng</artifactId>
            <version>${cucumber.version}</version>
            <scope>test</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>5.0.0</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.1.2</version>
        </dependency>
        
        <dependency>
            <groupId>com.akathist.maven.plugins.launch4j</groupId>
            <artifactId>launch4j-maven-plugin</artifactId>
            <version>1.5.1</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven.compiler.version}</version>
                <configuration>
                    <encoding>UTF-8</encoding>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>${maven.surefire.version}</version>
                <configuration>
                    <includes>
                        <include>**/ParallelRun.java</include>
                    </includes>
                    <parallel>methods</parallel>
                    <threadCount>4</threadCount>
                    <useUnlimitedThreads>false</useUnlimitedThreads>
                </configuration>
            </plugin>

            <!-- <plugin> <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-failsafe-plugin</artifactId>
            <version>3.0.0-M3</version> <executions> <execution> <goals>
            <goal>integration-test</goal>
                </goals> <configuration>
            UNCOMMENT - To add any exclusions if required <excludes>
            <exclude>**/*IT*.java</exclude> </excludes> <includes> UNCOMMENT
            BELOW LINE
                - To execute feature files with a single runner
            <include>**/MyTestRunner.java</include>
                UNCOMMENT BELOW LINE -
            To execute feature files with multiple runners
            <include>**/*Runner.java</include>
                </includes> UNCOMMENT BELOW
            3 LINES - To execute using parallel or combination
                option
            <parallel>methods</parallel> <threadCount>4</threadCount>
            <perCoreThreadCount>true</perCoreThreadCount>
                UNCOMMENT BELOW
            3 LINES - To execute using forking or combination option
            <forkCount>2</forkCount> <reuseForks>true</reuseForks>
            <reportsDirectory>${project.build.directory}/failsafe-reports_${surefire.forkNumber}</reportsDirectory>
            </configuration> </execution> </executions> </plugin> -->
        </plugins>
    </build>
</project>

问题根源

POM.xml中<java.version>配置为11,Maven编译插件会以此版本编译代码,生成Java 11对应的class文件(版本号55.0),但运行时环境是Java 8(仅支持最高版本52.0),导致版本不兼容。

解决步骤

  1. 修改POM.xml的Java版本
    将<properties>中的<java.version>从11改为8:

    <java.version>8</java.version>
    

    由于maven-compiler-plugin的source和target参数引用了该变量,修改后编译插件会自动使用Java 8进行编译。

  2. 清理并重新编译项目
    在项目根目录执行以下Maven命令:

    mvn clean install
    

    或者在Eclipse中操作:右键项目 → Run As → Maven Clean,完成后再右键项目 → Run As → Maven Install,彻底清除旧的class文件并重新编译。

  3. 验证依赖兼容性
    检查已更新的依赖对Java 8的支持情况:

    • Selenium 4.17.0+、WebDriverManager 5.6.3均支持Java 8,无需降级
    • Cucumber 6.9.0、Apache POI等依赖也兼容Java 8,无需调整版本
  4. 确认Eclipse的Maven运行环境
    确保Eclipse中Maven使用的JRE为Java 8:

    • 打开Window → Preferences → Maven → Installations,检查Maven关联的JRE是否为Java 8
    • 右键项目 → Properties → Build Path → Libraries,确认所有JRE System Library都是Java 8
    • 右键项目 → Properties → Java Compiler,再次确认Compiler compliance level设置为1.8

内容的提问来源于stack exchange,提问作者priyanka bonam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 02:15:55