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 了很多遍,编译没问题!

有没有大神知道原因的

阅读 4.4k
2 个回答

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的来源.

就是没有找到相关的方法。

clean install 编译没问题,不代表jar包就正确引入了。

你目前的这个框架里,引入的包是有这个方法么,自己先看一下。

然后就是排查一下依赖,是不是引入了低版本的。

就是这么几个思路。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题