Java Spring 将 spring-boot-starter-parent 升级到版本 2.6.6 后启动 java.lang.NoClassDefFoundError

Java Spring Boot java.lang.NoClassDefFoundError after upgrading spring-boot-starter-parent to version 2.6.6

我有一个 Spring 引导应用程序,它一直在使用 spring-boot-starter-parent 版本 2.3.9.RELEASE。由于存在漏洞,我们需要更新应用程序以使用版本 2.6.6。

升级后,我的一些单元测试出现以下错误:

testGetDiscount(com.ally.abmt.integrationapi.util.IntegrationApiUtilTest)  Time elapsed: 0 sec  <<< ERROR!
java.lang.IllegalStateException: Failed to load ApplicationContext
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean]: Factory method 'entityManagerFactory' threw exception; nested exception is java.lang.NoClassDefFoundError: org/hibernate/boot/model/naming/CamelCaseToUnderscoresNamingStrategy
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean]: Factory method 'entityManagerFactory' threw exception; nested exception is java.lang.NoClassDefFoundError: org/hibernate/boot/model/naming/CamelCaseToUnderscoresNamingStrategy
Caused by: java.lang.NoClassDefFoundError: org/hibernate/boot/model/naming/CamelCaseToUnderscoresNamingStrategy

是否有人对可能导致此问题的原因有任何想法and/or我可能需要做些什么来解决它?

对于 Spring 引导,每个次要版本更新都会引入重大更改。通常有一个或两个版本 类 等在被删除之前被弃用。由于您实际上是在升级 3 个次要版本,因此如果您分别从 2.3 升级到 2.4、2.5 到 2.6,您会错过一些弃用警告。

查看 Spring 版本 2.4, 2.5 and 2.6 的启动发行说明,了解自 2.3 以来所做的更改。重大变化都应该提到。

在这种情况下,我找到了以下条目:

SpringPhysicalNamingStrategy has been deprecated in favor of Hibernate 5.5’s CamelCaseToUnderscoresNamingStrategy

由于只有您的单元测试失败,您可能定义了较旧的 Hibernate 版本。删除它并使用 Spring Boot 提供的