Java版本不兼容报错求助:UnsupportedClassVersionError问题排查
Exception in thread "main" java.lang.UnsupportedClassVersionError: org/testng/remote/RemoteTestNG 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(Unknown Source) at java.security.SecureClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.access$100(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
问题分析
该异常的核心矛盾是Java运行环境版本与依赖库的编译版本不兼容:
- 类文件版本
55.0对应Java 11,说明你使用的TestNG库是用Java 11或更高版本编译的;而程序运行时依赖的是Java 8(仅支持最高52.0版本的类文件),Java不支持用低版本运行高版本编译的类文件。 - 尽管安装了JDK 20,但程序实际启动时仍调用JRE 1.8,说明偏好设置的修改未覆盖到程序的实际运行配置。
解决方案
1. 统一Java版本环境
根据需求二选一:
- 保留JRE 1.8:降级TestNG到兼容Java 8的版本(如TestNG 7.0.0及以下),在项目构建文件(
pom.xml/build.gradle)中明确指定版本。 - 升级运行环境:将程序编译、运行环境统一切换到Java 11或更高版本(如已安装的JDK 20),需检查以下配置:
- IDE项目SDK:确认项目模块的SDK、语言级别均设置为JDK 20。
- 运行配置:在IDE的「Run/Debug Configurations」中,将JRE选项指定为JDK 20。
- 系统环境变量:确保
JAVA_HOME指向JDK 20,且PATH中JDK 20的bin目录优先级高于JRE 1.8。
2. 验证版本生效情况
在终端执行以下命令,确认当前生效的Java版本:
java -version javac -version
若输出为Java 20,说明环境配置正确;若仍为Java 8,需调整环境变量顺序。
3. 清理重建项目
- 清理IDE缓存(如IntelliJ IDEA:
File -> Invalidate Caches...)。 - 执行项目的clean和build操作,确保所有编译产物基于目标Java版本生成。
内容的提问来源于stack exchange,提问作者Hemanth kumar
相关产品推荐
相关产品推荐

