java.lang.NoSuchMethodError 错误分析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qy_0626/article/details/83656895

今天部署项目替换了两个文件,然后就出现了下面的问题

type Exception report

message Handler processing failed; nested exception is java.lang.NoSuchMethodError: com.net.util.PathUtil.GetTopAd()Ljava/lang/String;

description The server encountered an internal error that prevented it from fulfilling this request.

exception

org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.NoSuchMethodError: com.net.util.PathUtil.GetTopAd()Ljava/lang/String;
	org.springframework.web.servlet.DispatcherServlet.triggerAfterCompletionWithError(DispatcherServlet.java:1284)
	org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:965)
	org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:876)
	org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:931)
	org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:822)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
	org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:807)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
	com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:123)
	org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
	org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:108)
root cause

java.lang.NoSuchMethodError: com.net.util.PathUtil.GetTopAd()Ljava/lang/String;
	com.net.crud.handlers.UsersHandlers.FindNewsById(UsersHandlers.java:468)
	com.net.crud.handlers.UsersHandlers$$FastClassByCGLIB$$fc066d1e.invoke(<generated>)
	org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
	org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:713)
	org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
	com.alibaba.druid.support.spring.stat.DruidStatInterceptor.invoke(DruidStatInterceptor.java:72)
	org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
	org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:646)
	com.net.crud.handlers.UsersHandlers$$EnhancerByCGLIB$$2c7c917f.FindNewsById(<generated>)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	java.lang.reflect.Method.invoke(Unknown Source)
	org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:214)
	org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
	org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
	org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:748)
	org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:689)
	org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83)
	org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:945)
	org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:876)
	org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:931)
	org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:822)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
	org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:807)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
	com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:123)
	org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
	org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:108)
note The full stack trace of the root cause is available in the Apache Tomcat/6.0.44 logs.

java.lang.NoSuchMethodError

一般情况下这个问题是说jar包冲突,所以我按这个思路去排查了一下jar,但是之前这个版本的项目一直运行的很好,此次只是替换了三个文件,怎么也想不通是什么jar出了问题,然后我将报错的信息又仔细的看了几遍

根据  “nested exception is java.lang.NoSuchMethodError: com.net.util.PathUtil.GetTopAd()Ljava/lang/String;”  猜想是不是这个文件有什么问题,然后我去打开了源码,对照给出的提示 去看这个PathUtil的GetTopAd()方法,然后我看到这方法就恍然大悟了,为什么呢,因为这个方法是之前整理项目,优化后新补充的配置,也就是说我这次更新的三个文件中在不久前被我优化了配置,但是线上版本并未更改优化后的配置,因此在我替换了三份文件后报了这个错误,就是因为替换 的文件使用了新的配置但是线上版本的PathUtil还是旧版本的配置,导致它找不到这个方法,自然也就报这个错误了。所以啊不要固定自己的思维,我一开始看到这个错误就认为是jar冲突错误,并未向想过其他异常,其实这个问题已经出现很多次了,由于这个更新总是不同步导致的问题,但是一直没有记下来,这次也是为了提醒自己,也给遇到这个问题的同学一点思路,换个方向走,可能会有惊喜哦

遇到抛出的错误可以多看几遍异常信息,毕竟提醒的很清晰了啊

总结:java.lang.NoSuchMethodError 这个异常不仅是因为jar依赖冲突导致的,也可能是未在编译文件找到此方法,概括的说不是方法缺失就是引用的方法冲突,不是多了就是少了,下次遇到这个问题可以从这两个方面排查

猜你喜欢

转载自blog.csdn.net/qy_0626/article/details/83656895