升级javamelody-core至1.66.0后启动JBOSS 7.4失败
问题描述
将项目依赖的javamelody-core版本从1.65.0升级到1.66.0后,启动JBOSS服务器时出现类加载冲突错误,已检查项目子依赖未发现问题,求解决思路。
错误日志
10:22:20,187 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-2) MSC000001: Failed to start service jboss.deployment.unit."coecontextTest.war".POST_MODULE: org.jboss.msc.service.StartException in service jboss.deployment.unit."coecontextTest.war".POST_MODULE: WFLYSRV0153: Falha ao processar a fase POST_MODULE de deployment "coecontextTest.war" at org.jboss.as.server@15.0.5.Final-redhat-00001//org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:189) at org.jboss.msc@1.4.12.Final-redhat-00001//org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1739) at org.jboss.msc@1.4.12.Final-redhat-00001//org.jboss.msc.service.ServiceControllerImpl$StartTask.execute(ServiceControllerImpl.java:1701) at org.jboss.msc@1.4.12.Final-redhat-00001//org.jboss.msc.service.ServiceControllerImpl$ControllerTask.run(ServiceControllerImpl.java:1559) at org.jboss.threads@2.4.0.Final-redhat-00001//org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35) at org.jboss.threads@2.4.0.Final-redhat-00001//org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1990) at org.jboss.threads@2.4.0.Final-redhat-00001//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486) at org.jboss.threads@2.4.0.Final-redhat-00001//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377) at java.base/java.lang.Thread.run(Thread.java:834) Caused by: java.lang.LinkageError: loader constraint violation in interface itable initialization for class org.hibernate.validator.internal.engine.ValidatorFactoryImpl: when selecting method org.hibernate.validator.HibernateValidatorFactory.usingContext()Lorg/hibernate/validator/HibernateValidatorContext; the class loader 'org.hibernate.validator@6.0.22.Final-redhat-00002' @554864d (instance of org.jboss.modules.ModuleClassLoader, child of 'app' jdk.internal.loader.ClassLoaders$AppClassLoader) for super interface org.hibernate.validator.HibernateValidatorFactory, and the class loader 'deployment.coecontextTest.war' @13bc62ff (instance of org.jboss.modules.ModuleClassLoader, child of 'app' jdk.internal.loader.ClassLoaders$AppClassLoader) of the selected method's type, org.hibernate.validator.internal.engine.ValidatorFactoryImpl have different Class objects for the type org.hibernate.validator.HibernateValidatorContext used in the signature at deployment.coecontextTest.war//org.hibernate.validator.HibernateValidator.buildValidatorFactory(HibernateValidator.java:38) at deployment.coecontextTest.war//org.hibernate.validator.internal.engine.ConfigurationImpl.buildValidatorFactory(ConfigurationImpl.java:364) at org.hibernate.validator.cdi@6.0.22.Final-redhat-00002//org.hibernate.validator.cdi.ValidationExtension.<init>(ValidationExtension.java:120) at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490) at java.base/java.lang.Class.newInstance(Class.java:584) at org.jboss.as.weld.common@7.4.2.GA-redhat-00002//org.jboss.as.weld.deployment.WeldPortableExtensions.tryRegisterExtension(WeldPortableExtensions.java:59) at org.jboss.as.weld@7.4.2.GA-redhat-00002//org.jboss.as.weld.deployment.processors.WeldPortableExtensionProcessor.loadAttachments(WeldPortableExtensionProcessor.java:119) at org.jboss.as.weld@7.4.2.GA-redhat-00002//org.jboss.as.weld.deployment.processors.WeldPortableExtensionProcessor.deploy(WeldPortableExtensionProcessor.java:79) at org.jboss.as.server@15.0.5.Final-redhat-00001//org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:182) ... 8 more
解决思路
- 对比javamelody-core版本依赖差异:用
mvn dependency:tree -Dincludes=org.hibernate.validator命令分别在1.65.0和1.66.0版本下执行,查看是否新增或升级了Hibernate Validator相关依赖,定位冲突来源。 - 排除javamelody-core中的Hibernate Validator依赖:如果1.66.0版本引入了与JBOSS自带版本冲突的Hibernate Validator,在pom.xml中配置依赖排除:
<dependency> <groupId>net.bull.javamelody</groupId> <artifactId>javamelody-core</artifactId> <version>1.66.0</version> <exclusions> <exclusion> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator</artifactId> </exclusion> <!-- 如有其他相关子依赖也一并排除 --> </exclusions> </dependency> - 配置JBOSS类加载优先级:在项目的
jboss-deployment-structure.xml中指定优先使用服务器提供的Hibernate Validator模块:<jboss-deployment-structure> <deployment> <dependencies> <module name="org.hibernate.validator" export="true"/> </dependencies> </deployment> </jboss-deployment-structure> - 统一Hibernate Validator版本:如果项目自身主动引入了Hibernate Validator,确保其版本与JBOSS自带的
6.0.22.Final-redhat-00002一致,或者直接移除该依赖,让服务器提供。 - 清理重建项目:执行
mvn clean install清理旧依赖包,重新构建后再部署到JBOSS。
内容的提问来源于stack exchange,提问作者Guilherme Dambros
相关产品推荐
相关产品推荐

