首页 > 解决方案 > 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

标签: javamavenelasticsearch

解决方案


我已经找到了错误的原因。此项目中还有另一个依赖项,其中包括 3.5.0 版本的lucene-core.jar. 它与 elasticsearch 中的 8.1.0 版本冲突lucene-core.jar。该程序在运行时实际使用的是 3.5.0 版本。


推荐阅读