Elasticsearchjava.lang.ClassNotFoundException: org.elasticsearch.client.core.CountRequest

Posted 好好生活_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Elasticsearchjava.lang.ClassNotFoundException: org.elasticsearch.client.core.CountRequest相关的知识,希望对你有一定的参考价值。

引言

之前在Elasticsearch搜索服务中增加了Count方法,可直接根据查询条件得到符合条件的总数,在搜索服务中也已经测试通过,但在引用了该服务的其他业务服务启动报错,如下:

排查

出现类似ClassNotFoundException这种错误,一般是引用的jar包有问题。搜索服务是用的6.8.6版本,并且该方法已经测试通过,所以想到的问题的原因是不是其他业务服务中引用的Elasticsearch版本并不是该版本的。
确实,发现业务服务中引用的elasticsearch版本并不是6.8.6,而是6.4.3,如下:

我在search工程中引入的是6.8.6,而在业务系统中引入search工程,版本确是6.4.3,解决此问题,启动报错的问题也就解决了。

原因

猜想是因为maven的继承关系影响了版本。所以从pom文件的parent节点出发查找真正原因,search工程中添加了parent节点,引用的是整个项目的父工程,父工程中统一引用了spring-boot-starter-parent,版本为2.1.9.RELEASE。

通过spring-boot-dependencies节点可跳转到具体的pom,可以发现对应的elasticsearch版本确实是6.4.3的,如下:

解决

问题原因找到了,解决方法也就很简单了。我们只需要在parent工程中,指定引入的elasticserch版本为6.8.6即可,如下:

指定版本后,再去查看其他业务系统会发现引入的elasticsearch版本是正确的了,并且启动报错问题也解决了。

总结

一个小问题,还是值得写篇博客记录下,因为之前也没有注意项目中引入的版本是否符合期望的,通过这次遇到的问题才让自己发现了这个需要关注的点。
所以如果以后再遇到类似的基础服务工程,并且又有对应的parent,还是需要看下其他工程引用的版本是不是真的是自己指定的。

以上是关于Elasticsearchjava.lang.ClassNotFoundException: org.elasticsearch.client.core.CountRequest的主要内容,如果未能解决你的问题,请参考以下文章