Jboss EAP 6.4 无法在模块中定义类 org.springframework.web.servlet.DispatcherServlet

Posted

技术标签:

【中文标题】Jboss EAP 6.4 无法在模块中定义类 org.springframework.web.servlet.DispatcherServlet【英文标题】:Jboss EAP 6.4 Failed to define class org.springframework.web.servlet.DispatcherServlet in Module 【发布时间】:2015-07-15 02:42:55 【问题描述】:

我正在评估将我的 Web 应用程序从 Jboss7.1 迁移到正式支持 Java 8 的 JBoss EAP 6.4。作为其中的一部分,我安装了 JBoss EAP 6.4 和 jdk1.8.0_45。 我的 Web 应用程序是基于 Spring MVC 的,因此我已经在 J​​Boss 模块文件夹 (\modules\system\layers\base\org\springframework\main) 下配置了所有必需的 spring 模块。 完成所有这些配置后,当我尝试部署我的 Web 应用程序时,它会失败并出现以下错误,

16:35:06,197 WARN [org.jboss.modules](MSC 服务线程 1-2)无法从本地模块加载器在模块“org.springframework:main”中定义类 org.springframework.web.servlet.DispatcherServlet @9e89d68(查找器:本地模块查找器 @3b192d32(根:C:\localsetup\jboss-eap-6.4\modules,C:\localsetup\jboss-eap-6.4\modules\system\layers\base)):org.jboss .modules.ModuleLoadError: org.jboss.interceptor:main 在 org.jboss.modules.ModuleLoadException.toError(ModuleLoadException.java:78) [jboss-modules.jar:1.3.6.Final-redhat-1] 在 org.jboss.modules.Module.getPathsUnchecked(Module.java:1392) [jboss-modules.jar:1.3.6.Final-redhat-1] 在 org.jboss.modules.Module.loadModuleClass(Module.java:563) [jboss-modules.jar:1.3.6.Final-redhat-1] 在 org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:205) [jboss-modules.jar:1.3.6.Final-redhat-1] 在 org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:459) [jboss-modules.jar:1.3.6.Final-redhat-1] 在 org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:408) [jboss-modules.jar:1.3.6.Final-redhat-1] 在 org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:389) [jboss-modules.jar:1.3.6.Final-redhat-1] 在 org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:134) [jboss-modules.jar:1.3.6.Final-redhat-1] 在 java.lang.ClassLoader.defineClass1(Native Method) [rt.jar:1.8.0_45] 在 java.lang.ClassLoader.defineClass(Unknown Source) [rt.jar:1.8.0_45] 在 org.jboss.modules.ModuleClassLoader.doDefineOrLoadClass(ModuleClassLoader.java:361) [jboss-modules.jar:1.3.6.Final-redhat-1] 在 org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:482) [jboss-modules.jar:1.3.6.Final-redhat-1] 在 org.jboss.modules.ModuleClassLoader.loadClassLocal(ModuleClassLoader.java:277) [jboss-modules.jar:1.3.6.Final-redhat-1] 在 org.jboss.modules.ModuleClassLoader$1.loadClassLocal(ModuleClassLoader.java:92) [jboss-modules.jar:1.3.6.Final-redhat-1] 在 org.jboss.modules.Module.loadModuleClass(Module.java:568) [jboss-modules.jar:1.3.6.Final-redhat-1] 在 org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:205) [jboss-modules.jar:1.3.6.Final-redhat-1] 在 org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:459) [jboss-modules.jar:1.3.6.Final-redhat-1] 在 org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:408) [jboss-modules.jar:1.3.6.Final-redhat-1] 在 org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:389) [jboss-modules.jar:1.3.6.Final-redhat-1] 在 org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:134) [jboss-modules.jar:1.3.6.Final-redhat-1] 在 org.jboss.as.jaxrs.deployment.JaxrsScanningProcessor.checkDeclaredApplicationClassAsServlet(JaxrsScanningProcessor.java:285) 在 org.jboss.as.jaxrs.deployment.JaxrsScanningProcessor.scanWebDeployment(JaxrsScanningProcessor.java:152) 在 org.jboss.as.jaxrs.deployment.JaxrsScanningProcessor.deploy(JaxrsScanningProcessor.java:103) 在 org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:159) [jboss-as-server-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21] 在 org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1980) [jboss-msc-1.1.5.Final-redhat-1.jar:1.1.5.Final-redhat-1] 在 org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1913) [jboss-msc-1.1.5.Final-redhat-1.jar:1.1.5.Final-redhat-1] 在 java.util.concurrent.ThreadPoolExecutor.runWorker(未知来源)[rt.jar:1.8.0_45] 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [rt.jar:1.8.0_45] 在 java.lang.Thread.run(Unknown Source) [rt.jar:1.8.0_45]

16:35:06,331 错误 [org.jboss.msc.service.fail](MSC 服务线程 1-2)MSC000001:无法启动服务 jboss.deployment.unit."web.war".POST_MODULE: org. jboss.msc.service.StartException in service jboss.deployment.unit."web.war".POST_MODULE: JBAS018733: 无法处理部署“web.war”的阶段 POST_MODULE 在 org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:166) [jboss-as-server-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21] 在 org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1980) [jboss-msc-1.1.5.Final-redhat-1.jar:1.1.5.Final-redhat-1] 在 org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1913) [jboss-msc-1.1.5.Final-redhat-1.jar:1.1.5.Final-redhat-1] 在 java.util.concurrent.ThreadPoolExecutor.runWorker(未知来源)[rt.jar:1.8.0_45] 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [rt.jar:1.8.0_45] 在 java.lang.Thread.run(Unknown Source) [rt.jar:1.8.0_45] 引起:org.jboss.modules.ModuleLoadError: org.jboss.interceptor:main 在 org.jboss.modules.ModuleLoadException.toError(ModuleLoadException.java:78) [jboss-modules.jar:1.3.6.Final-redhat-1] 在 org.jboss.modules.Module.getPathsUnchecked(Module.java:1392) [jboss-modules.jar:1.3.6.Final-redhat-1] 在 org.jboss.modules.Module.loadModuleClass(Module.java:563) [jboss-modules.jar:1.3.6.Final-redhat-1] 在 org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:205) [jboss-modules.jar:1.3.6.Final-redhat-1] 在 org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:459) [jboss-modules.jar:1.3.6.Final-redhat-1] 在 org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:408) [jboss-modules.jar:1.3.6.Final-redhat-1] 在 org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:389) [jboss-modules.jar:1.3.6.Final-redhat-1] 在 org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:134) [jboss-modules.jar:1.3.6.Final-redhat-1] 在 java.lang.ClassLoader.defineClass1(Native Method) [rt.jar:1.8.0_45] 在 java.lang.ClassLoader.defineClass(Unknown Source) [rt.jar:1.8.0_45] 在 org.jboss.modules.ModuleClassLoader.doDefineOrLoadClass(ModuleClassLoader.java:361) [jboss-modules.jar:1.3.6.Final-redhat-1] 在 org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:482) [jboss-modules.jar:1.3.6.Final-redhat-1] 在 org.jboss.modules.ModuleClassLoader.loadClassLocal(ModuleClassLoader.java:277) [jboss-modules.jar:1.3.6.Final-redhat-1] 在 org.jboss.modules.ModuleClassLoader$1.loadClassLocal(ModuleClassLoader.java:92) [jboss-modules.jar:1.3.6.Final-redhat-1] 在 org.jboss.modules.Module.loadModuleClass(Module.java:568) [jboss-modules.jar:1.3.6.Final-redhat-1] 在 org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:205) [jboss-modules.jar:1.3.6.Final-redhat-1] 在 org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:459) [jboss-modules.jar:1.3.6.Final-redhat-1] 在 org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:408) [jboss-modules.jar:1.3.6.Final-redhat-1] 在 org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:389) [jboss-modules.jar:1.3.6.Final-redhat-1] 在 org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:134) [jboss-modules.jar:1.3.6.Final-redhat-1] 在 org.jboss.as.jaxrs.deployment.JaxrsScanningProcessor.checkDeclaredApplicationClassAsServlet(JaxrsScanningProcessor.java:285) 在 org.jboss.as.jaxrs.deployment.JaxrsScanningProcessor.scanWebDeployment(JaxrsScanningProcessor.java:152) 在 org.jboss.as.jaxrs.deployment.JaxrsScanningProcessor.deploy(JaxrsScanningProcessor.java:103) 在 org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:159) [jboss-as-server-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21] ... 5 更多

有人可以帮助我吗,我错过了什么或做错了什么?

【问题讨论】:

之前使用jboss 7.1的时候有没有spring模块?如果没有,请确保您:现在不要将它与您的战争打包,并且您添加了一个 jboss-deployment-structure.xml 文件,该文件依赖于您的 spring 模块 是的,我的 jboss 7.1 中也有 spring 模块。所以我在 Jboss Eap 6.4 中添加了这些 spring 模块,并且在 jboss-deployment-structure.xml 文件中添加了依赖项。提供下面的xml文件供您参考, 【参考方案1】:

对我来说,我也有类似的问题。问题是该类在多个 jar 中可用,而 jboss 从错误的 JAR 中获取它。 我可以通过以下步骤解决它:

    查找类(我已经用 Eclipse CTRL+SHIFT+T 完成了)

    选择一个较旧的 JAR

    通过 mvn dependency:tree 从 wich 依赖项搜索 JAR 被添加到类路径

    转到包含它的依赖项并添加排除项:

    some.groupsome.artifact1.2.3版本> some.other.groupsome.other.artifact排除> 排除> 依赖>

【讨论】:

以上是关于Jboss EAP 6.4 无法在模块中定义类 org.springframework.web.servlet.DispatcherServlet的主要内容,如果未能解决你的问题,请参考以下文章

JBOSS EAP 6.4 无法加载拓扑

Jboss (6.4 EAP) 到 WebSphere (7.x)

JBOSS EAP 6.4:无法在生成的 WSDL 中的“soap:address”中使用 HTTPS 模式

如何定义 JBoss 安全角色 - 从 WebSphere 迁移到 EAP 6.4

无法在 JBoss EAP 6.4 环境中使用 wildfly-maven-plugin 2.0.1 进行部署

SQL Server 2014 在 JBOSS EAP 6.4 数据源配置中连接失败