java - Elasticsearch7.3中SpringBoot的NoClassDefFoundError异常
问题描述
我尝试通过高级别的客户端创建文档:
Map<String, Object> jsonMap = new HashMap<>();
jsonMap.put("name", "Bob");
jsonMap.put("id", "123456");
IndexRequest indexRequest = new IndexRequest("lead").id("123456").source(jsonMap);
client.index(indexRequest, RequestOptions.DEFAULT);
但它会抛出 NoClassDefFoundError: org/apache/lucene/util/BytesRefIterator。弹性版本是 7.3.2。这就是我的 pom.xml 中的 elasticsearch 依赖项。
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>${elasticsearch.version}</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>${elasticsearch.version}</version>
</dependency>
完整的堆栈跟踪:
Exception in thread "Thread-20" java.lang.NoClassDefFoundError: org/apache/lucene/util/BytesRefIterator
at org.elasticsearch.action.index.IndexRequest.source(IndexRequest.java:397)
at org.elasticsearch.action.index.IndexRequest.source(IndexRequest.java:377)
at org.elasticsearch.action.index.IndexRequest.source(IndexRequest.java:365)
at com.sunyard.mdhome.elasticsearch.impl.MetadataDocumentBuilderImpl.createDocument(MetadataDocumentBuilderImpl.java:182)
at com.sunyard.mdhome.elasticsearch.impl.MetadataDocumentBuilderImpl.build(MetadataDocumentBuilderImpl.java:76)
at com.sunyard.mdhome.elasticsearch.impl.MetadataDocumentBuilderImpl.getPage(MetadataDocumentBuilderImpl.java:163)
at com.sunyard.mdhome.elasticsearch.impl.MetadataDocumentBuilderImpl.getSyncMetadata(MetadataDocumentBuilderImpl.java:121)
at com.sunyard.mdhome.thread.MetadataSyncThread.run(MetadataSyncThread.java:30)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.ClassNotFoundException: org.apache.lucene.util.BytesRefIterator
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 9 more
maven依赖树: maven依赖树01 maven依赖树02
解决方案
我已经找到了错误的原因。此项目中还有另一个依赖项,其中包括 3.5.0 版本的lucene-core.jar
. 它与 elasticsearch 中的 8.1.0 版本冲突lucene-core.jar
。该程序在运行时实际使用的是 3.5.0 版本。
推荐阅读
- react-native - 反应本机共享 API - 同时使用消息和 url 时的问题
- c# - 编译器看不到接口中的默认实现?
- deployment - 无需重新部署依赖解决方案即可部署 BizTalk 架构解决方案
- javascript - 无法在反应中显示从 api 接收到的不同 json 数据
- javascript - Sweetalert2 Swal 火在弹出后消失。很奇怪的错误
- python - 在 Python 中使用多线程 for 循环有意义吗?
- linux - 在字符串中使用主机名
- iis - 访问 IIS 8.5 服务器站点时出现“连接重置”错误
- java - Hibernate:外键的列数错误。应该是 1
- reactjs - 更改文本框后显示保存按钮(react、redux、material ui)