开发者社区> 问答> 正文

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

有没有大神知道原因的

" ![image.png](https://ucc.alicdn.com/pic/developer-ecology/61287756160d4506936956fc8b07f088.png)

展开
收起
因为相信,所以看见。 2020-05-25 15:57:22 1492 0
1 条回答
写回答
取消 提交回答
  • 阿里,我所有的向往

    "

    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包就正确引入了。

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

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

    就是这么几个思路。

    " ![image.png](https://ucc.alicdn.com/pic/developer-ecology/6644f0b6889d456da5a7be4760169126.png)
    2020-05-25 20:40:39
    赞同 展开评论 打赏
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载