今天在启动微服务项目的时候出现了一个错误,大概就是controller调用某个implservice的Bean找不到。
在这里插入图片描述
elasticsearch下的xcontent包下找不到ToXcontentObject这个类。
在这里插入图片描述

先查看POM文件,确认导入无误。
在这里插入图片描述
检查一遍yml配置文件,没什么大问题,检查一下JDK版本,也是没问题。再看了下maven projects,没有冲突,而且这个x-content这个依赖是存在的,于是又maven-reimport刷新了几下,还是不行。有点懵逼。
在这里插入图片描述
由于之前项目导入过不一样版本ElasticSearch依赖,怀疑是包冲突。最后把Maven库repository中的elasticsearch依赖删除了,mvn clean package重新编译了一下,仍然没什么叼用,陷入了沉思。。。
在这里插入图片描述
什么办法都没用只能使用最后的法宝,清除缓存然后重启,结果果然不出所料,还是TM的不行。。。
在这里插入图片描述

最后只能去看一下Jar包源码中报错的org.elasticsearch.comman.xcontent.ToXcontentObject类是个什么东西,然后搜索发现居然没有这个东西,如此诡异的BUG,Maven-projects中都有这个依赖,项目的external libraies里面没有,之前maven-reimport过呀。
在这里插入图片描述
可能是整个项目的问题,然后用idea单独打开了这个服务,果然external libraies中有了jar包,找到了该死的ToXcontentObject接口。服务也可以正常启动了。
在这里插入图片描述

至于为什么之前的项目存在maven中有依赖,external libraies中没jar包的情况,还需要再仔细思考下,谷歌了一下说需要maven-reimport一下那显然对我无效,先把问题解决了再说。。。以后微服务再莫名其妙找不到jar包就把他挑出来单练。

java . lan g. NoClassDefFoundError : org / elasticsearch /common/xcontent/DeprecationHandler 报找不到类,这个类应该 7.3.2里面的,我pom依赖也没 问题 编译阶段没 问题 ,到运行时候,有 问题 ,所以到打好的lib包中查看: 发现 这个es还是老的包。 从pom中查看 有 问题 。 将es依赖重新放到项目的根级父类后: 并在子模块中,将pom依赖中的版本号干掉,让它自动继承 再次打包,查看lib 全部ok,重启服务,正常,问 jdk升级之后出现 异常 java . lan g. NoClassDefFoundError : java x/xml/ws/Service 1、解决方案jdk降级至1.8之前 2、由于JDK9以后,去除了 java x.xml包需要引入对应的jar包 <dependency> <groupId> java x.activation</groupId> <artifactId> java x.activation-api</artifactId> <version>1.2.0</version> </dependency> <dependency> <groupId> java x.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.3.1</version> </dependency> ..... 在学习 elasticsearch ,在使用 elasticsearch Java 客户端时,出现了写 问题 ,主要就是报各种的 ` NoClassDefFoundError ` 如:` java . lan g. NoClassDefFoundError : org / elasticsearch /xcontent/ToXContentObject`,出现这种 NoClassDefFoundError 问题 基本上就是 maven 依赖错误或者版本不对,于是顺着这个思路排查,摸到了 问题 所在。 <dependency> <groupId> org . elasticsearch . client </groupId> <artifactId> elasticsearch - rest - high - level - client </artifactId> 心都凉了,主要是引入依赖的时候, Rest High Level Client 版本和子包版本不一致,我这边的话是选中的三个包版本不一致,当然图里是我整里半天整一致的,原先好像是7.x,可能是因为我的电脑里6和7都有吧。。。 解决方案就是强制依赖包的版本确保一致,我这边是用了management,也可以用exclousions先排除依赖包,在引入正确的版本,当然这边因为版本不一致报了各种各样的错误,不一定就是这个 异常 ,勿喷 <dependencyManagement> failed to load elasticsearch nodes : org . elasticsearch . client .transport.NoNodeAvailableException: None of the configured nodes are available: [{#transport#-1}{4J2eCGFXSZmM3xH72WIF5A}{192.168.252.200}{... 问题 定位及分析 通常出现 java . lan g.NoSuchMethodError 异常 说明项目中出现了jar包冲突,项目运行时调用了版本A中的某个类的方法, 但实际上classLoader加载的是版本B的类文件,而版本B中并没有实际调用的方法签名,导致 异常 出现。 可以看到 elasticsearch - rest - high - level - client :7.4.2依赖于 elasticsearch ... Exception in thread "main" java . lan g. NoClassDefFoundError : org / elasticsearch /index/reindex/ReindexPlugin at org . elasticsearch .transport. client .PreBuiltTransport Client .<clinit>(PreBuiltTransport Client . java :78) at ElasticsSearchUtil.ci...