You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot整合Elasticsearch 8.6启动报错:缺失JsonProvider依赖

解决Spring Boot连接Elasticsearch 8.6时的NoClassDefFoundError: jakarta/json/spi/JsonProvider错误

问题原因

该错误是因为Elasticsearch 8.x系列依赖Jakarta JSON Processing API(jakarta.json包),你的Spring Boot项目要么缺少该依赖,要么存在javax.json与jakarta.json的依赖冲突。

具体解决步骤

1. 匹配版本兼容性

  • Spring Boot 3.x:天然支持Jakarta EE API,直接用官方starter即可自动适配。
  • Spring Boot 2.7.x:默认使用javax.json,需要手动替换为Jakarta版本的JSON依赖。

2. Maven依赖配置

情况1:使用Spring Boot 3.x

直接引入Spring Boot Data Elasticsearch starter,它会自动管理所有必要依赖(包括Jakarta JSON):

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

情况2:使用Spring Boot 2.7.x

排除Spring Boot starter中自带的javax.json-api,并引入Jakarta版本的JSON API及实现:

<!-- Spring Boot Data Elasticsearch Starter -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
    <exclusions>
        <!-- 排除javax版本的JSON依赖 -->
        <exclusion>
            <groupId>javax.json</groupId>
            <artifactId>javax.json-api</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<!-- 引入Jakarta JSON API -->
<dependency>
    <groupId>jakarta.json</groupId>
    <artifactId>jakarta.json-api</artifactId>
    <version>2.1.1</version>
</dependency>

<!-- 引入Jakarta JSON的运行时实现 -->
<dependency>
    <groupId>org.eclipse.angus</groupId>
    <artifactId>angus-json</artifactId>
    <version>1.1.4</version>
    <scope>runtime</scope>
</dependency>

3. 清理冲突依赖

检查你的pom.xml(或build.gradle),移除任何手动引入的旧版Elasticsearch客户端依赖,比如elasticsearch-rest-high-level-client,避免与Spring Boot starter的依赖产生冲突。

4. 验证ES客户端配置

确保你的Elasticsearch配置类使用Spring Boot Data Elasticsearch 4.4+(对应ES8.x)的客户端API,示例:

import org.springframework.context.annotation.Configuration;
import org.springframework.data.elasticsearch.client.ClientConfiguration;
import org.springframework.data.elasticsearch.client.elc.ElasticsearchConfiguration;

@Configuration
public class ElasticsearchConfig extends ElasticsearchConfiguration {

    @Override
    public ClientConfiguration clientConfiguration() {
        return ClientConfiguration.builder()
                .connectedTo("localhost:9200") // ES地址
                .withBasicAuth("elastic", "your-es-password") // 若开启安全认证需添加
                .build();
    }
}

完成以上步骤后,重新构建并启动项目,即可解决该依赖缺失错误。

内容的提问来源于stack exchange,提问作者Carlos Ruiz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 05:58:24