spring - nested exception is java.lang.NoSuchMethodError

查看:139
本文介绍了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 反编译一下就能找到差别了.


  1. 因为 jrebel 会通过 agent transform 修改class字节码. 你需要找到 jrebel 配置的 class dir, 在对应的目录中找到PoiExcel2k3Helper文件, 通过javap就可以查看对应的字节码. 可能在这个文件中你定义的readExcelInArray方法是只有1个参数.
  2. 还有一个可能就是你的classpath环境中有2个PoiExcel2k3Helper文件, 因为编译, 运行时加载class的顺序不一致导致, 你调用的方法也不一样.
  3. 至于查看运行时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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆