java.lang.NoSuchMethodError org.springframework.core.annotation.AnnotationUtils.getAnnotation

当我运行我的junit测试时,我可以得到正确的结果,数据可以存储到数据库中。

当我将项目部署到tomcat时,我遇到了这个exception。

我的春季版本是3.1.1,tomcat版本是6.0。

2012-02-29-16:40:54,968 ERROR - Context initialization failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0': Initialization of bean failed; nested exception is java.lang.NoSuchMethodError: org.springframework.core.annotation.AnnotationUtils.getAnnotation(Ljava/lang/reflect/AnnotatedElement;Ljava/lang/Class;)Ljava/lang/annotation/Annotation; at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:527) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:580) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425) at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:276) at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:197) at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47) 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.addChildInternal(ContainerBase.java:799) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:779) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:601) at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:943) at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:563) at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1399) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:297) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:836) at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:761) at org.apache.catalina.manager.ManagerServlet.check(ManagerServlet.java:1500) at org.apache.catalina.manager.ManagerServlet.deploy(ManagerServlet.java:670) at org.apache.catalina.manager.ManagerServlet.doPut(ManagerServlet.java:435) at javax.servlet.http.HttpServlet.service(HttpServlet.java:640) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:563) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) at java.lang.Thread.run(Thread.java:619) 

这是行不通的 ):

pom.xml中:

  3.1.1.RELEASE 3.6.9.Final mysql mysql-connector-java 5.1.13     org.springframework spring-core ${spring.version}   org.springframework spring-web ${spring.version}   org.springframework spring-webmvc ${spring.version}    org.springframework spring-aop ${spring.version}   org.springframework spring-tx ${spring.version}   org.aspectj aspectjrt 1.6.12   org.aspectj aspectjweaver 1.6.12   cglib cglib-nodep 2.2.2    asm asm 3.3.1     jstl jstl 1.1.2   taglibs standard 1.1.2    org.slf4j slf4j-api true 1.6.4   org.slf4j slf4j-log4j12 true 1.6.4   log4j log4j true 1.2.15      org.hibernate hibernate-core ${hibernate.version}   org.hibernate hibernate-entitymanager ${hibernate.version}   org.hibernate hibernate-ehcache ${hibernate.version}   org.javassist javassist 3.15.0-GA     commons-dbcp commons-dbcp 1.4    org.springframework spring-orm ${spring.version}   org.springframework spring-jdbc ${spring.version}    ${jdbc.driver.groupId} ${jdbc.driver.artifactId} ${jdbc.driver.version} runtime   

正确的签名是

 public static  A getAnnotation(Method method, Class annotationType) 

有些东西试图打电话

 public static  A getAnnotation(AnnotatedElement element, Class annotationType) 

第二种方法是在春季3.2.0 (至少我没有在API到春季3.0中找到)春季3.1( 感谢Sebastien )中引入的,所以你很可能已经使用spring 3.1或更高版本来构建应用程序和之前的版本3.1关于tomcat。 调查那个方向。

你最好通过原因完成整个堆栈,这会有所帮助(在这种情况下并不多,但它总是更好)

由于您收到NoSuchMethodError,似乎找到了AnnotationUtils类,但可能找不到名为getAnnotation的方法。 所以在运行时我认为可以使用类的错误版本。

您应该检查您的webapp文件夹部署了哪个版本的spring,并检查该版本是否具有“getAnnotation”方法。

你可以在那里查看: https : //fisheye.springsource.org/browse/spring-framework/org.springframework.core/src/main/java/org/springframework/core/annotation/AnnotationUtils.java

请注意,似乎已在主分支上重新组织了类(您使用的是???)

您还应该执行mvn依赖:树并检查弹簧版本,看看这里是否没有很多不同的弹簧版本,如果是这种情况,请使用依赖项排除或maven的依赖关系管理标记来准确指定您要使用哪个版本

您尚未将Spring库正确部署到Tomcat实例。