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),导致版本不兼容。
解决步骤
修改POM.xml的Java版本
将<properties>中的<java.version>从11改为8:<java.version>8</java.version>由于maven-compiler-plugin的
source和target参数引用了该变量,修改后编译插件会自动使用Java 8进行编译。清理并重新编译项目
在项目根目录执行以下Maven命令:mvn clean install或者在Eclipse中操作:右键项目 → Run As → Maven Clean,完成后再右键项目 → Run As → Maven Install,彻底清除旧的class文件并重新编译。
验证依赖兼容性
检查已更新的依赖对Java 8的支持情况:- Selenium 4.17.0+、WebDriverManager 5.6.3均支持Java 8,无需降级
- Cucumber 6.9.0、Apache POI等依赖也兼容Java 8,无需调整版本
确认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
相关产品推荐
相关产品推荐

