Java7 Spring Boot项目引入HtmlUnit2.21遇版本兼容性错误求助
解决Java7 Spring Boot项目中HtmlUnit引发的UnsupportedClassVersionError问题
这个错误的根源很清晰:你遇到的java.lang.UnsupportedClassVersionError: org/eclipse/jetty/websocket/api/Session : Unsupported major.minor version 52.0,说明Session类是用Java 8(对应版本号52.0)编译的,但你的项目运行在Java 7环境(版本号51.0),JVM自然无法加载这个类。
问题原因分析
你使用的HtmlUnit 2.21版本依赖的Jetty WebSocket组件已经升级到了Java 8兼容的版本(Jetty 9.3及以上版本要求Java 8),而你的Spring Boot 1.5.8.RELEASE虽然支持Java 7,但不会自动替你降级第三方依赖的版本,这就导致项目中混入了Java 8编译的类。
两种可行的解决方案
方案一:降级HtmlUnit到Java 7兼容版本
HtmlUnit 2.19及更早版本依赖的是Jetty 9.2.x系列,这个系列完全兼容Java 7。你可以直接在pom.xml中指定HtmlUnit的版本:
<dependency> <groupId>net.sourceforge.htmlunit</groupId> <artifactId>htmlunit</artifactId> <version>2.19</version> </dependency>
方案二:强制覆盖Jetty WebSocket依赖版本
如果你不想降级HtmlUnit,可以通过Maven的依赖管理强制指定Jetty WebSocket相关组件的版本为Java 7兼容的版本(比如9.2.22.v20170606),这样会覆盖HtmlUnit带来的高版本依赖:
<dependencyManagement> <dependencies> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-websocket-api</artifactId> <version>9.2.22.v20170606</version> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-websocket-client</artifactId> <version>9.2.22.v20170606</version> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-websocket-common</artifactId> <version>9.2.22.v20170606</version> </dependency> </dependencies> </dependencyManagement>
验证解决效果
修改后执行mvn dependency:tree命令,检查Jetty WebSocket相关依赖的版本,确保它们都是9.2.x系列,而不是9.3+的版本,这样就能彻底解决版本不兼容的问题了。
内容的提问来源于stack exchange,提问作者Saita
相关产品推荐
相关产品推荐

