当方法肯定存在时,java.lang.NoSuchMethodError
我有一个基于Spring框架的Java Web应用程序,它是在SpringSource Tool Suite(“STS”)中构建的,以及Apache Tomcat的本地副本.我们还有一个内部生产服务器,再次运行Tomcat. 当我在我的开发机器上运行应用程序,并在Web应用程序中执行特定操作时,一切正常.但是,当我将Web应用程序部署到服务器上的Tomcat(通过maven生成的war文件),并重复上述特定操作时,我会遇到一些意外行为.当我检查服务器tomcat日志文件时,我发现了这个……
现在,updateAlfrescoNodeRef方法肯定存在于MediaDao类中 – 否则我的代码将无法在STS中编译…
如您所见,方法签名是正确的. 我怀疑maven生成war文件时可能存在问题,因此我提取了war文件内容.在WEB-INF / lib文件夹中,我找到了包含MediaDao类的jar文件,并提取了其内容.然后我做了……
现在,由于类文件是二进制文件,我大多看到了gobledegook.但是,我能够清楚地了解updateAlfrescoNodeRef方法的引用,以及该方法中String的内容.所以,这意味着该方法肯定存在. Spring框架XML文件中的bean配置肯定是正确的,或者当我在开发机器上执行它时代码不会运行. 谷歌搜索建议服务器上存在库冲突,但所有引用的类–MediaServlet,MediaServiceImpl,MediaDao–都在主项目中(其中包含WEB-INF文件夹).虽然可以想象服务器上可能存在多个依赖项副本,但肯定只有一个主项目jar的副本. 有没有人有任何想法为什么会这样? 最佳答案
问题现在已经解决了.谢谢大家的帮助.
事实证明,主项目有一个依赖项,它有另一个MediaDao类,在完全相同的包路径中.有人基本上将类复制到该依赖项中(作为库资源,以便许多项目可以使用它而无需将主项目指定为依赖项).但是,有人没有删除主项目中的类. 所以,当我修改主项目中的类(我添加了updateAlfrescoNodeRef方法),并在我的机器上运行STS中的应用程序时,Tomcat在主项目中使用了该类的版本,而不是因为库项目而在库中关门了.但是,当应用程序部署到服务器时,看起来使用了库中类的版本(当然,它没有使用updateAlfrescoNodeRef方法). 专家提示如果您发现自己处于类似情况:在STS中,按CTRL SHIFT T打开“打开类型”对话框,并输入有问题的类的名称以查看具有该名称的类的项目列表. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |