2014-09-24 91 views
0

我一直在阅读关于从包含在jar文件中的项目导入bean的问题,如this。但是我的项目(我们称之为Project A)只是一个在WEB-INF文件夹中的mvc-config.xml,而在src/main/resources/spring文件夹中的application-config.xml(都来自Spring Web Maven模板)。从罐子导入弹簧豆

我在注释中定义了bean,服务和存储库,在这些类中,直到现在,我不需要任何其他配置,比如在mvc-config.xml中定义bean。到目前为止,这个文件相当简单,如下所示。但是,当我在一个罐子里装这个项目,进口它在另一个项目(我们称之为项目B),并尝试自动装配DAO实现(在项目B),一个错误

Severe: Context initialization failed 
java.lang.NoClassDefFoundError: com/mycompany/dao/EntityDao 

被抛出。请注意,这个特定的类是通过一个接口实现来定义的,该接口实现在native项目中被自动装入。

是否因为我没有设法正确导入项目B中的项目A,或者是否需要做另一种安排才能使用项目A中的@Repository,@Entity和其他Spring东西?我应该如何使用项目B中的项目A提供的服务?谢谢!

  • 项目B MVC-config.xml中

    <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" 
        xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd 
         http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> 
    
    <context:component-scan base-package="com.mycompany"/> 
    
    <mvc:annotation-driven /> 
    
    <context:annotation-config/> 
    
    <mvc:default-servlet-handler/> 
    
    <import resource="classpath*:/WEB-INF/mvc-config.xml" /> 
    <import resource="classpath*:/spring/application-config.xml" /> 
    
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
         <property name="prefix" value="/WEB-INF/view/"/> 
         <property name="suffix" value=".jsp"/> 
    </bean> 
    

  • 堆栈跟踪抛出错误:

Severe: Context initialization failed 
java.lang.NoClassDefFoundError: com/mycompany/EntityDao 
    at java.lang.Class.getDeclaredMethods0(Native Method) 
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2521) 
    at java.lang.Class.getDeclaredMethods(Class.java:1845) 
    at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:571) 
    at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:489) 
    at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:473) 
    at org.springframework.util.ReflectionUtils.getUniqueDeclaredMethods(ReflectionUtils.java:534) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getTypeForFactoryMethod(AbstractAutowireCapableBeanFactory.java:663) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:593) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1394) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doGetBeanNamesForType(DefaultListableBeanFactory.java:385) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:354) 
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:97) 
    at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:609) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464) 
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403) 
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306) 
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4206) 
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4705) 
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057) 
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:840) 
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057) 
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463) 
    at org.apache.catalina.core.StandardService.start(StandardService.java:525) 
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:754) 
    at org.apache.catalina.startup.Catalina.start(Catalina.java:595) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289) 
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414) 
Caused by: java.lang.ClassNotFoundException: com.mycompany.EntityDao 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680) 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526) 
    ... 33 more 
+1

你似乎在这里错了路,首先你的项目有一个mvc-config.xml文件,这意味着它是一个web项目项目,我从来没有见过在另一个web项目中使用的web项目,如果你打包jar包的项目A,确保它包含WEB-INF文件夹。比确保项目A jar在运行时可用。这是一个maven项目,你如何试图运行它? – varun 2014-09-25 09:18:03

+0

@varun,事实上,由于整个工作空间的重建,我在之前的Web项目中做了一个“降级”。从您的小技巧中,我决定从一个Spring-Maven简单项目开始测试相同的架构,并且一切运行良好。事实上,这是我的旧项目的令人回想起的网络结构,它不适合用作罐子。请给出答案,我会接受它。谢谢。 – Alex 2014-09-25 14:54:39

回答

0

你似乎是在这里错误的路径,首先你的项目有一个mvc-config.xml文件,这意味着它是一个Web项目项目,我从来没有见过一个Web项目在另一个Web项目中使用,如果你打包项目A作为jar做确定它包含WEB-INF文件夹。比确保项目A jar在运行时可用。这是一个maven项目,你如何试图运行它?