升级Hibernate5与JPA2后启动JBoss报ClassNotFoundException求助
问题:升级Hibernate 5与JPA 2后JBoss EAP 6.2启动报错
尝试过多种类似问题的解决方案均无效,特求助。将项目升级至Hibernate 5与JPA 2后,启动JBoss EAP 6.2服务器时出现如下运行时错误:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name org.springframework.validation.beanvalidation.OptionalValidatorFactoryBean#0': Lookup method resolution failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.validation.beanvalidation.OptionalValidatorFactoryBean] from ClassLoader [ModuleClassLoader for Module "deployment.sfv-webapp.war:main" from Service Module Loader] [...] Caused by: java.lang.ClassNotFoundException: javax.validation.ParameterNameProvider
以下是项目pom.xml中的相关依赖:
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.4.12.Final</version> </dependency> <dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator</artifactId> <version>5.4.3.Final</version> </dependency> <dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>2.0.1.Final</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> <exclusions> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>5.2.4.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-oxm</artifactId> <version>5.2.4.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>5.2.4.RELEASE</version> </dependency>
已知信息:已引入所需依赖,但怀疑存在Jar版本冲突;项目为遗留项目,数月后终止维护,必须使用Hibernate 5.4.12与javax(不可使用jakarta)。
解决方案
1. 修正validation-api版本匹配
Hibernate Validator 5.4.x对应的是Bean Validation 1.1规范,需将validation-api版本从2.0.1.Final调整为1.1.0.Final,避免版本不兼容:
<dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>1.1.0.Final</version> </dependency>
2. 排除JBoss EAP自带的Validation模块
JBoss EAP 6.2默认集成了旧版本的Bean Validation实现(Hibernate Validator 4.x + validation-api 1.0),会与项目依赖冲突。需在项目的WEB-INF目录下创建jboss-deployment-structure.xml文件,排除服务器自带的相关模块:
<jboss-deployment-structure> <deployment> <exclusions> <!-- 排除服务器自带的validation API模块 --> <module name="javax.validation.api" /> <!-- 排除服务器自带的Hibernate Validator实现 --> <module name="org.hibernate.validator" /> </exclusions> </deployment> </jboss-deployment-structure>
3. 统一Spring依赖版本
确保${spring.version}变量的值为5.2.4.RELEASE,与其他Spring依赖版本保持一致,避免Spring内部版本冲突。
内容的提问来源于stack exchange,提问作者coman
相关产品推荐
相关产品推荐

