JBOSS EAP 7.0-java.lang.NoClassDefFoundError:org/springframework/context/support/ClassPathXmlApplicationContext
我目前正在将应用程序从JBoss 5.1迁移到JBoss 7.0 EAP服务器。JBOSS EAP 7.0-java.lang.NoClassDefFoundError:org/springframework/context/support/ClassPathXmlApplicationContext,jboss,jboss7.x,noclassdeffounderror,Jboss,Jboss7.x,Noclassdeffounderror,我目前正在将应用程序从JBoss 5.1迁移到JBoss 7.0 EAP服务器。 我已经为JBoss服务器添加了一个名为-org.springframework的模块,用于spring依赖项JAR <?xml version="1.0" ?> <module xmlns="urn:jboss:module:1.1" name="org.springframework"> <resources> <resource-root pa
我已经为JBoss服务器添加了一个名为-org.springframework的模块,用于spring依赖项JAR
<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.1" name="org.springframework">
<resources>
<resource-root path="spring-core-3.0.5.RELEASE.jar"/>
<resource-root path="spring-context-3.0.5.RELEASE.jar"/>
<resource-root path="spring-beans-3.0.5.RELEASE.jar"/>
<resource-root path="spring-expression-3.0.5.RELEASE.jar"/>
<resource-root path="spring-web-3.0.5.RELEASE.jar"/>
<resource-root path="spring-aop-3.0.5.RELEASE.jar"/>
<resource-root path="spring-asm-3.0.5.RELEASE.jar"/>
<resource-root path="spring-jdbc-3.0.5.RELEASE.jar"/>
<resource-root path="spring-tx-3.0.5.RELEASE.jar"/>
<resource-root path="org.springframework.web.servlet-3.0.0.M3.jar"/>
<resource-root path="commons-logging-1.1.1.jar"/>
</resources>
<dependencies>
<module name="javax.api"/>
<module name="javax.servlet.jsp.api"/>
<module name="javax.faces.api"/>
</dependencies>
</module>
1)为什么我们需要在JBoss7EAP服务器中添加模块来加载类,即使JAR被捆绑在war的WEB-INF/lib文件夹中
部署在服务器上?2) 如何解决上述错误?我认为您没有完美地定义spring依赖项。以下是步骤: 您可以将Spring定义为一个模块 以下是创建弹簧模块的步骤: 1.下载所需版本的Spring。在本例中,我们使用Spring 3.1.1 2.创建目录:$JBOSS_HOME/modules/org/springframework/spring/main 3.将下载的Spring库复制到该目录 4.在该目录下使用以下内容创建module.xml。确保这些名称与库的名称相对应:
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.1" name="org.springframework.spring">
<resources>
<resource-root path="org.springframework.aop-3.1.1.RELEASE.jar"/>
<resource-root path="org.springframework.asm-3.1.1.RELEASE.jar"/>
<resource-root path="org.springframework.aspects-3.1.1.RELEASE.jar"/>
<resource-root path="org.springframework.beans-3.1.1.RELEASE.jar"/>
<resource-root path="org.springframework.context-3.1.1.RELEASE.jar"/>
<resource-root path="org.springframework.context.support-3.1.1.RELEASE.jar"/>
<resource-root path="org.springframework.core-3.1.1.RELEASE.jar"/>
<resource-root path="org.springframework.expression-3.1.1.RELEASE.jar"/>
<resource-root path="org.springframework.instrument-3.1.1.RELEASE.jar"/>
<resource-root path="org.springframework.instrument.tomcat-3.1.1.RELEASE.jar"/>
<resource-root path="org.springframework.jdbc-3.1.1.RELEASE.jar"/>
<resource-root path="org.springframework.jms-3.1.1.RELEASE.jar"/>
<resource-root path="org.springframework.orm-3.1.1.RELEASE.jar"/>
<resource-root path="org.springframework.oxm-3.1.1.RELEASE.jar"/>
<resource-root path="org.springframework.test-3.1.1.RELEASE.jar"/>
<resource-root path="org.springframework.transaction-3.1.1.RELEASE.jar"/>
<resource-root path="org.springframework.web-3.1.1.RELEASE.jar"/>
<resource-root path="org.springframework.web.portlet-3.1.1.RELEASE.jar"/>
<resource-root path="org.springframework.web.servlet-3.1.1.RELEASE.jar"/>
<resource-root path="org.springframework.web.struts-3.1.1.RELEASE.jar"/>
</resources>
<dependencies>
<module name="org.apache.commons.logging"/>
<module name="javax.api" export="true"/>
<module name="org.jboss.vfs"/>
</dependencies>
</module>
下面是一个绝对最小的module.xml(不同的Spring版本无关):
5.将以下jboss-deployment-structure.xml放入您的应用程序存档(WEB-INF/jboss-deployment-structure.xml用于WAR或META-INF/jboss-deployment-structure.xml用于EAR或EJB jar)以使用上述模块:
如果您正在使用JBoss EAP 6.1.x及更高版本或EAP 7,请使用以下命令:
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<deployment>
<dependencies>
<module name="org.springframework.spring" export="true" meta-inf="export"/>
</dependencies>
</deployment>
</jboss-deployment-structure>
如果JBoss EAP 6.0.x,则使用下面的
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<deployment>
<dependencies>
<module name="org.springframework.spring" export="true">
<imports>
<include path="META-INF**"/>
<include path="org**"/>
</imports>
<exports>
<include path="META-INF**"/>
<include path="org**"/>
</exports>
</module>
</dependencies>
</deployment>
</jboss-deployment-structure>
注意:jboss-deployment-structure.xml中模块的meta-inf是在jboss EAP 6.1.0中添加的,它允许资源的meta-inf中的文件可见。由于这在JBoss EAP 6.0.x中不可用,因此该部分允许您访问默认不可见的META-INF目录
注意:Spring框架模块不应包括servlet-api.jar、xml-api.jar、jta-api.jar和其他api等资源。这些API由JDK或JBoss实现,尝试使用不同版本的API将导致类加载问题和其他问题
注意:Spring模块应该包括所有非Java/JavaEE依赖项。Spring模块可以依赖于JBoss和任何公共JBoss模块提供的javax.api/javaee.api,但是对于Spring具有的其他依赖项,例如aopalliance,它们需要作为资源包含在模块或其他自定义模块中。我认为您没有完美地定义Spring依赖项。以下是步骤: 您可以将Spring定义为一个模块 以下是创建弹簧模块的步骤: 1.下载所需版本的Spring。在本例中,我们使用Spring 3.1.1 2.创建目录:$JBOSS_HOME/modules/org/springframework/spring/main 3.将下载的Spring库复制到该目录 4.在该目录下使用以下内容创建module.xml。确保这些名称与库的名称相对应:
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.1" name="org.springframework.spring">
<resources>
<resource-root path="org.springframework.aop-3.1.1.RELEASE.jar"/>
<resource-root path="org.springframework.asm-3.1.1.RELEASE.jar"/>
<resource-root path="org.springframework.aspects-3.1.1.RELEASE.jar"/>
<resource-root path="org.springframework.beans-3.1.1.RELEASE.jar"/>
<resource-root path="org.springframework.context-3.1.1.RELEASE.jar"/>
<resource-root path="org.springframework.context.support-3.1.1.RELEASE.jar"/>
<resource-root path="org.springframework.core-3.1.1.RELEASE.jar"/>
<resource-root path="org.springframework.expression-3.1.1.RELEASE.jar"/>
<resource-root path="org.springframework.instrument-3.1.1.RELEASE.jar"/>
<resource-root path="org.springframework.instrument.tomcat-3.1.1.RELEASE.jar"/>
<resource-root path="org.springframework.jdbc-3.1.1.RELEASE.jar"/>
<resource-root path="org.springframework.jms-3.1.1.RELEASE.jar"/>
<resource-root path="org.springframework.orm-3.1.1.RELEASE.jar"/>
<resource-root path="org.springframework.oxm-3.1.1.RELEASE.jar"/>
<resource-root path="org.springframework.test-3.1.1.RELEASE.jar"/>
<resource-root path="org.springframework.transaction-3.1.1.RELEASE.jar"/>
<resource-root path="org.springframework.web-3.1.1.RELEASE.jar"/>
<resource-root path="org.springframework.web.portlet-3.1.1.RELEASE.jar"/>
<resource-root path="org.springframework.web.servlet-3.1.1.RELEASE.jar"/>
<resource-root path="org.springframework.web.struts-3.1.1.RELEASE.jar"/>
</resources>
<dependencies>
<module name="org.apache.commons.logging"/>
<module name="javax.api" export="true"/>
<module name="org.jboss.vfs"/>
</dependencies>
</module>
下面是一个绝对最小的module.xml(不同的Spring版本无关):
5.将以下jboss-deployment-structure.xml放入您的应用程序存档(WEB-INF/jboss-deployment-structure.xml用于WAR或META-INF/jboss-deployment-structure.xml用于EAR或EJB jar)以使用上述模块:
如果您正在使用JBoss EAP 6.1.x及更高版本或EAP 7,请使用以下命令:
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<deployment>
<dependencies>
<module name="org.springframework.spring" export="true" meta-inf="export"/>
</dependencies>
</deployment>
</jboss-deployment-structure>
如果JBoss EAP 6.0.x,则使用下面的
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<deployment>
<dependencies>
<module name="org.springframework.spring" export="true">
<imports>
<include path="META-INF**"/>
<include path="org**"/>
</imports>
<exports>
<include path="META-INF**"/>
<include path="org**"/>
</exports>
</module>
</dependencies>
</deployment>
</jboss-deployment-structure>
注意:jboss-deployment-structure.xml中模块的meta-inf是在jboss EAP 6.1.0中添加的,它允许资源的meta-inf中的文件可见。由于这在JBoss EAP 6.0.x中不可用,因此该部分允许您访问默认不可见的META-INF目录
注意:Spring框架模块不应包括servlet-api.jar、xml-api.jar、jta-api.jar和其他api等资源。这些API由JDK或JBoss实现,尝试使用不同版本的API将导致类加载问题和其他问题
注意:Spring模块应该包括所有非Java/JavaEE依赖项。Spring模块可以依赖于JBoss和任何公共JBoss模块提供的javax.api/javaee.api,但对于Spring具有的其他依赖项,如aopalliance,它们需要作为资源包含在模块或其他自定义模块中。必须删除我的答案,因为我的假设不正确。事实上,在de
spring-core-3.0.5.RELEASE.jar中找不到的类,您已经定义了它。尝试将部署结构中的spring模块更改为
,添加导出
属性。@Omoro。谢谢你帮助我。我添加到jboss-deployment-structure.xml,但仍然得到相同的错误。我可以知道export属性有什么区别吗?我在JBoss Wildfly中使用这个属性的应用程序使用了spring。通过maven,我将spring依赖项的范围设置为提供的,这样我就只在应用程序中使用JBoss中spring模块提供的spring依赖项<代码>导出
属性用于导出其他模块可能需要的依赖项<代码>