2012-03-13 132 views
0

我试图做一个基本的弹簧mvc 3.0应用程序。但是当我启动我的服务器时,出现以下错误找不到方法错误

java.lang.NoSuchMethodError: org.springframework.beans.factory.annotation.InjectionMetadata.<init>(Ljava/lang/Class;)V 
at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findPersistenceMetadata(PersistenceAnnotationBeanPostProcessor.java:350) 
at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(PersistenceAnnotationBeanPostProcessor.java:296) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:830) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:493) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) 
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) 
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) 
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:585) 
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913) 
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464) 
at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:631) 
at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:588) 
at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:645) 
at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:508) 
at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:449) 
at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:133) 
at javax.servlet.GenericServlet.init(GenericServlet.java:160) 
at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1266) 
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1185) 
at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:857) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:135) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169) 
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) 
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) 
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987) 
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579) 
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 
at java.lang.Thread.run(Thread.java:679) 

有人能告诉我为什么吗?

回答

0

评论库版本。例如,您可以使用旧的弹簧豆类版本和较新的弹簧核心版本。

1

在包含InjectionMetadata.class的文件的类路径中搜索包括档案(.jar文件)(例如Total Commander容易)。像这样的错误通常发生在加载类的不同版本时,然后在编辑代码时使用/看到您喜欢的IDE。

6

由于版本不同,您有两个库不兼容。

一方面,你有在版本3.0.5(或其他一些其他3.0.x)spring-beans.jar。 - 该罐子包含org.springframework.beans.factory.annotation.InjectionMetadata,带有两个参数构造函数public InjectionMetadata(Class targetClass, Collection<InjectedElement> elements)。 这是这个类的唯一构造函数。

另一方面,你有spring-orm.jar,我不知道它的版本,但我想像2.0.x或3.1.x.它包含一个类org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor,它尝试使用一个参数构造函数创建InjectionMetadata的实例。

而且这个结果在这个

java.lang.NoSuchMethodError: org.springframework.beans.factory.annotation.InjectionMetadata.(Ljava/lang/Class;)V

解决方法很简单:确保spring-beans.jarspring-orm.jar(以及所有其他春天罐子)是同一版本。

0

您可以使用BOM依赖关系使所有罐子一致。

<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-framework-bom</artifactId> 
    <version>4.0.5.RELEASE</version> 
    <type>pom</type> 
    <scope>import</scope> 
</dependency> 
0

解决方法很简单:确保弹簧beans.jar和弹簧orm.jar(以及所有其他春天罐子)是同一版本。

+0

这实在是一个评论,而不是一个答案。有了更多的代表,[你将能够发表评论](// stackoverflow.com/privileges/comment)。 – manetsus 2016-08-20 08:31:07