从Hibernate Search 5.9.2迁移至5.10.1时Tomcat启动遇类找不到异常
解决Hibernate Search 5.10.1迁移时的NoClassDefFoundError问题
这个问题我之前帮人排查过,核心原因是Hibernate Search 5.10.x和你当前使用的Hibernate ORM 5.2.17版本不兼容,具体来说:
- 你遇到的
java.lang.NoClassDefFoundError: org/hibernate/resource/beans/container/spi/ExtendedBeanManager$LifecycleListener,这个类是Hibernate ORM 5.3.x版本才新增的API,而你的Hibernate ORM 5.2.17中根本没有这个类,所以Tomcat启动时会找不到它。
具体解决步骤
1. 升级Hibernate ORM到兼容版本
Hibernate Search 5.10.x系列要求搭配Hibernate ORM 5.3.x版本(官方兼容规则明确说明)。建议你把Hibernate ORM版本升级到5.3.x的稳定版,比如5.3.20.Final(这是5.3系列的最后一个稳定版本)。
修改你的Maven依赖:
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.3.20.Final</version> </dependency>
2. 验证其他依赖的兼容性
你当前的技术栈和升级后的Hibernate ORM 5.3.x是兼容的:
- Spring Framework 5.0.6:完全支持Hibernate ORM 5.3.x
- Spring Data JPA 2.0.7:官方明确支持Hibernate ORM 5.2和5.3版本
- Hibernate Validator 6.0.10:与Hibernate ORM 5.3.x兼容无冲突
- Spring Security 5.0.5:和Spring 5.0.x配套,不会出现兼容性问题
3. 清理Maven缓存并重新构建
修改依赖后,执行以下命令清理缓存并重新构建项目,确保新的依赖包被正确下载:
mvn clean install -U
4. 重启Tomcat验证
完成上述步骤后,重启Tomcat,应该就能成功创建entityManagerFactory Bean,解决启动错误了。
额外说明
如果你暂时不想升级Hibernate ORM,那只能放弃升级到Hibernate Search 5.10.x,继续使用5.9.2版本(因为5.9.x系列是兼容Hibernate ORM 5.2.x的)。但从长期维护角度,更推荐升级ORM到兼容版本,这样能获得Hibernate Search 5.10的新特性和Bug修复。
内容的提问来源于stack exchange,提问作者marcam
相关产品推荐
相关产品推荐

