spring - nested exception is java.lang.NoSuchMethodError
本文介绍了spring - nested exception is java.lang.NoSuchMethodError的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
Handler processing failed; nested exception is
java.lang.NoSuchMethodError:
com.eroadsf.framework.web.system.util.PoiExcel2k3Helper.readExcelInArray(Ljava/lang/String;I[Ljava/lang/String;)Ljava/util/ArrayList
我的函数原型是这样的 public ArrayList<String[]> readExcelInArray(String
filePath, int sheetIndex, String[] columns) {
我是这样调用的 helper.readExcelInArray(file.getPath(),sheetIndex,clomns)
<font color=red> 我上过Stack Overflow,感觉回答都不怎么样,也没有热度高的</font>
我clean install 了很多遍,编译没问题!
有没有大神知道原因的
解决方案
NoSuchMethodError
没有找到相关的方法, 你编译能通过. 这只能说明你的编译环境
和你运行时环境
的CLASSPATH
有区别.
这个问题打个断点或者把运行时对应的 class 反编译一下就能找到差别了.
- 因为 jrebel 会通过 agent transform 修改
class
字节码. 你需要找到 jrebel 配置的class dir
, 在对应的目录中找到PoiExcel2k3Helper
文件, 通过javap
就可以查看对应的字节码. 可能在这个文件中你定义的readExcelInArray
方法是只有1个参数.- 还有一个可能就是你的
classpath
环境中有2个PoiExcel2k3Helper
文件, 因为编译, 运行时加载class
的顺序不一致导致, 你调用的方法也不一样.- 至于查看运行时
classpath
环境, 你通过classload
加载class
查看该类对应的方法就行.
ClassLoader loader = Test.class.getClassLoader(); System.out.println(loader.getResource("foo/Test.class"));
通过上面的代码, 你可以知道
class
的来源.
这篇关于spring - nested exception is java.lang.NoSuchMethodError的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文