You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用runtime-name部署WildFly时出现ClassNotFoundException异常

问题描述

部署HA单例应用时,需要用--runtime-name参数指定稳定名称(默认WAR文件名带版本号,会导致新版本生成不同单例,不符合HA需求)。在WildFly 27.0.1中使用以下命令部署:

./jboss-cli.sh --connect --command="deploy MyApp-1.0.0.war --name=MyApp-1.0.0.war --runtime-name=MyApp --force"

当runtime-name与WAR文件名一致(或省略该参数)时,应用正常加载;但runtime-name与WAR文件名不同时,应用无法启动,所有类触发ClassNotFoundException。

错误日志

2024-05-28 15:15:11,201 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-2)  MSC000001: Failed to start service jboss.deployment.unit.MyApp.POST_MODULE: org.jboss.msc.service.StartException in service jboss.deployment.unit.MyApp.POST_MODULE: WFLYSRV0153: Failed to process phase POST_MODULE of deployment "MyApp"
        at org.jboss.as.server@19.0.1.Final//org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:189)
        at org.jboss.msc@1.4.13.Final//org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1739)
        at org.jboss.msc@1.4.13.Final//org.jboss.msc.service.ServiceControllerImpl$StartTask.execute(ServiceControllerImpl.java:1701)
        at org.jboss.msc@1.4.13.Final//org.jboss.msc.service.ServiceControllerImpl$ControllerTask.run(ServiceControllerImpl.java:1559)
        at org.jboss.threads@2.4.0.Final//org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
        at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1990)
        at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
        at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377)
        at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: org.jboss.as.server.deployment.DeploymentUnitProcessingException: java.lang.ClassNotFoundException:com.my.app.server.reports.control.TabControl from [Module "deployment.MyApp" from Service Module Loader]
        at org.jboss.as.ejb3@27.0.1.Final//org.jboss.as.ejb3.deployment.processors.BusinessViewAnnotationProcessor.getEjbClass(BusinessViewAnnotationProcessor.java:260)
        at org.jboss.as.ejb3@27.0.1.Final//org.jboss.as.ejb3.deployment.processors.BusinessViewAnnotationProcessor.deploy(BusinessViewAnnotationProcessor.java:89)
        at org.jboss.as.server@19.0.1.Final//org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:182)
        ... 8 more
Caused by: java.lang.ClassNotFoundException:com.my.app.server.reports.control.TabControl from [Module "deployment.MyApp" from Service Module Loader]
        at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:200)
        at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:410)
        at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398)
        at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:116)
        at org.jboss.as.ejb3@27.0.1.Final//org.jboss.as.ejb3.deployment.processors.BusinessViewAnnotationProcessor.getEjbClass(BusinessViewAnnotationProcessor.java:258)
        ... 10 more
解决方案及原因分析
  • 核心原因:当指定runtime-name不包含.war后缀时,WildFly会错误识别部署类型,导致类加载器无法正确定位WAR包内的类资源。HA单例要求的稳定名称需要保留WAR后缀。
  • 修正部署命令:将runtime-name设置为MyApp.war,既保持部署类型识别正确,又实现稳定名称的需求:
./jboss-cli.sh --connect --command="deploy MyApp-1.0.0.war --name=MyApp-1.0.0.war --runtime-name=MyApp.war --force"
  • 验证逻辑:设置后,部署单元名称为MyApp.war,HA单例能通过该稳定名称识别实例,同时WildFly正确识别为WAR部署,类加载器可正常加载内部类。

内容的提问来源于stack exchange,提问作者fs-chris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 09:13:15