找不到方法错误

时间:2012-03-13 18:18:57

标签: eclipse spring spring-mvc

我正在尝试制作一个基本的spring 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)

有人可以告诉我为什么吗?

5 个答案:

答案 0 :(得分:6)

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

一方面,你在版本3.0.5(或其他3.0.x)中有spring-beans.jar。 - 这个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(以及其他所有弹簧jar)的版本相同。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

查看库版本。例如,您可以使用旧的spring-beans版本和更新的spring-beans版本。

答案 3 :(得分: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>

答案 4 :(得分:0)

解决方案很简单:确保spring-beans.jar和spring-orm.jar(以及所有其他spring jar)具有相同的版本。