前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JAVA项目启动失败:NoSuchMethod /NoSuchField 排查

JAVA项目启动失败:NoSuchMethod /NoSuchField 排查

原创
作者头像
卡拉肖克
修改2018-12-18 10:52:01
1.9K0
修改2018-12-18 10:52:01
举报
文章被收录于专栏:签桶签桶签桶

项目启动报错,NoSuchMethod,NoSuchField,这个就是class加载过程出现了问题,需要加载类与jvm实际加载不通,机器不会骗人,下面给出我个人的排查思路。

以这个报错为例:java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;

step 1.先检查maven引入冲突

一个Class可能是在两个不同group的JAR中存在

mvn dependency:tree >dep.txt

这个在dep.txt中搜索persistence,检查是否有冲突,如果有exclusion

如果没有冲突,来继续排查,来看下面

step 2.查找冲突class存在的jar包

https://www.findjar.com/index.x

搜索冲突class
搜索冲突class
查看可能存在的jar
查看可能存在的jar

再回到step 1,检查是不是引入来冲突的jar包。

感谢天感谢地,居然还没有冲突包,哈哈哈,好开心,学了好久的jvm终于可以用到了。来看下一步

step 3,终极大法,类的加载过程

项目启动的时候,增加 -XX:+TraceClassLoading,来看看类的加载顺序。

打印出类的加载顺序
打印出类的加载顺序

项目启动时候回打印类加载过程如下图

类加载
类加载

在加载过程中搜索报错的字段,这个肯定能找出来,你会发现同样的类存在不同的包中。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • step 1.先检查maven引入冲突
  • step 2.查找冲突class存在的jar包
  • step 3,终极大法,类的加载过程
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档