JBOSS EAP 7.0 - java.lang.NoClassDefFoundError:org / springframework / context / support / ClassPathXmlApplicationContext

时间:2017-02-09 11:12:06

标签: jboss jboss7.x noclassdeffounderror

我目前正在将应用程序从JBoss 5.1迁移到JBoss 7.0 EAP服务器 我已经为JBoss服务器添加了一个名为 - org.springframework 的模块,用于弹簧依赖性罐子

<?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>

我在WAR

的jboss-deployment-structure.xml中定义了模块依赖项
<jboss-deployment-structure>

   <deployment>

      <dependencies>
         <module name="com.oracle" />
         <module name="org.springframework" />
      </dependencies>

   </deployment>

</jboss-deployment-structure>

部署到服务器的war还在其WEB-INF / lib文件夹中包含spring-context-3.0.5.RELEASE.jar

所以我认为所需的jar - spring-context-3.0.5.RELEASE.jar存在于类路径中。但我仍然得到以下错误:

04:33:30,496 INFO  [org.springframework.beans.factory.xml.XmlBeanDefinitionReader] (default task-19) Loading XML bean definitions from class path resource [core_services.xml]
04:33:30,507 INFO  [org.springframework.beans.factory.support.DefaultListableBeanFactory] (default task-19) Pre-instantiating singletons in org.springframework.beans.fact
ory.support.DefaultListableBeanFactory@9b765aa: defining beans [LogService,CacheService,PropertyService]; root of factory hierarchy
2017.02.09 04:33:30 ERROR CashViewsPortalServiceImpl(-2): org/springframework/context/support/ClassPathXmlApplicationContext
CallStack=java.lang.NoClassDefFoundError: org/springframework/context/support/ClassPathXmlApplicationContext
        at com.karthik.common.service.Services.getService(Services.java:31)
        at com.karthik.data.service.DataServices.getService(DataServices.java:18)
        at com.karthik.portal.server.PortalServiceImpl.getInitializeInfo(PortalServiceImpl.java:83)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:561)
        at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:265)
        at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:305)
        at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
        at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)
        at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
        at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
        at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
        at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
        at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)
        at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)

1)为什么我们需要在Jboss 7 EAP服务器中添加模块以进行类加载,即使jars捆绑在战争的WEB-INF / lib文件夹中  部署在服务器上?
2)如何解决上述错误

1 个答案:

答案 0 :(得分:0)

我认为你没有完全定义弹簧依赖关系。以下是步骤:

您可以将Spring定义为模块

以下是创建Spring模块的步骤:

1.下载所需的Spring版本。对于此示例,我们使用的是Spring 3.1.1。

2.创建目录:$ JBOSS_HOME / modules / org / springframework / spring / main。

3.将您下载的Spring库复制到该目录。

4.在该目录下创建具有以下内容的module.xml。确保这些对应于图书馆&#39;名称:

<?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版本无关紧要):

<?xml version="1.0"?>
<module xmlns="urn:jboss:module:1.1" name="org.springframework.spring">
  <resources>
    <resource-root path="spring-aop-3.2.3.RELEASE.jar"/>
    <resource-root path="spring-beans-3.2.3.RELEASE.jar"/>
    <resource-root path="spring-context-3.2.3.RELEASE.jar"/>
    <resource-root path="spring-core-3.2.3.RELEASE.jar"/>
    <resource-root path="spring-expression-3.2.3.RELEASE.jar"/>
  </resources>
  <dependencies>
    <module name="javax.api"/>
    <module name="org.apache.commons.logging"/>
  </dependencies>
</module>

5.在应用程序归档中放置以下jboss-deployment-structure.xml(WAR的WEB-INF / jboss-deployment-structure.xml或EAR或EJB的META-INF / jboss-deployment-structure.xml- 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中模块的元信息是在JBoss EAP 6.1.0中添加的,它允许资源的META-INF中的文件可见。由于这在JBoss EAP 6.0.x中不可用,因此该部分允许您访问默认情况下不可见的META-INF目录。

注意:Spring Framework模块不应包含servlet-api.jar,xml-apis.jar,jta-api.jar和其他API等资源。这些API由JDK或JBoss实现,并且尝试使用不同版本的API将导致类加载问题和其他问题。

注意:Spring模块应包含其所有非Java / JavaEE依赖项。 Spring模块可以依赖于JBoss提供的javax.api / javaee.api和任何公共JBoss模块,但是对于其他依赖关系,Spring具有诸如aopalliance,它们需要作为资源包含在模块或其他自定义模块中。 / p>

相关问题