Web应用从Weblogic迁移至JBoss EAP7.4部署时遇NoSuchMethodError错误
Weblogic迁移至JBoss EAP 7.4部署报错解决
问题描述
将Web应用从Weblogic迁移到JBoss EAP 7.4时,部署出现如下错误:
Caused by: java.lang.NoSuchMethodError: org.hibernate.validator.internal.util.logging.LoggerFactory.make()Lorg/hibernate/validator/internal/util/logging/Log;
已做操作:
- WAR包的
WEB-INF/lib目录包含所有Hibernate相关库 - 通过
WEB-INF/jboss-deployment-structure.xml尝试排除JBoss自带的org.hibernate.validator模块,但问题未解决 - 当前配置内容:
<jboss-deployment-structure> <deployment> <exclusions> <module name="org.hibernate.validator"/> </exclusions> </deployment> </jboss-deployment-structure>
排查与解决步骤
1. 扩展模块排除范围
JBoss EAP 7.4中,org.hibernate.validator可能被其他依赖模块间接引入,仅排除单个模块无法完全隔离内置库。修改jboss-deployment-structure.xml,补充排除相关传递依赖并强制加载WAR包内的类:
<jboss-deployment-structure> <deployment> <exclusions> <module name="org.hibernate.validator"/> <module name="javax.validation.api"/> <module name="javax.el.api"/> </exclusions> <dependencies> <system export="true"> <paths> <path name="org/hibernate/validator"/> <path name="javax/validation"/> </paths> </system> </dependencies> </deployment> </jboss-deployment-structure>
2. 校验Hibernate Validator版本兼容性
JBoss EAP 7.4内置的是Hibernate Validator 6.1.x版本,若WAR包内使用的是5.x等跨大版本的库,会因方法签名不匹配触发NoSuchMethodError。建议将WAR包内的Hibernate Validator版本调整为与内置版本大版本一致(6.x系列),避免版本冲突。
3. 检查类加载干扰
- 清理JBoss缓存目录:删除
standalone/tmp和standalone/data下的缓存文件,避免旧类缓存导致的加载异常 - 排查全局共享库:检查
standalone/deployments或服务器配置中是否存在其他引入Hibernate Validator的共享库,确保这些库不会干扰当前应用的类加载
4. 验证类加载顺序
在JBoss的standalone.xml中添加类加载日志配置,确认是否存在旧版本类被加载的情况:
<subsystem xmlns="urn:jboss:domain:logging:8.0"> <logger category="org.jboss.modules"> <level name="DEBUG"/> </logger> </subsystem>
通过日志定位类加载来源,针对性排除或移除冲突库。
内容的提问来源于stack exchange,提问作者user19955273
相关产品推荐
相关产品推荐

