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

Spring Boot 3.1.1集成Solr 9.3 EmbeddedSolrServer遇类缺失问题求助

Spring Boot 3.x 与 Solr 9.3 EmbeddedSolrServer 兼容性问题解答

核心结论

Solr 9.x 版本的 EmbeddedSolrServer 目前确实未完全适配 Spring Boot 3.x 基于的 Jakarta EE 规范,二者存在兼容性冲突,这也是你遇到一系列 NoClassDefFoundError 的根本原因。

问题原因分析

  1. 第一个错误(缺失javax.ws.rs.core.Application)
    Spring Boot 3.x 彻底移除了对 javax.* 命名空间 API 的依赖,全面切换到 Jakarta EE 的 jakarta.* 包。但 Solr 9.3 的 EmbeddedSolrServer 在初始化时,内部仍依赖旧的 javax.ws.rs 相关类,导致类加载失败。

  2. 添加 Jakarta 依赖后的错误(缺失jakarta.ws.rs.core.Configurable)
    你引入的 jakarta.ws.rs-api 是 Jakarta EE 规范的实现,但 Solr 内部代码是针对 javax.ws.rs 编写的,类路径中实际存在的是 jakarta.ws.rs.core.Configurable,而 Solr 期望加载的是 javax.ws.rs.core.Configurable,类名完全不匹配,因此报错依旧。

可行解决方案

1. 替代方案:使用 HttpSolrClient 连接独立 Solr 服务

放弃嵌入式的 EmbeddedSolrServer,改用 HTTP 方式连接独立部署的 Solr 服务器,这是目前最稳妥的方案,Spring Boot 3.x 与 Solr 9.x 的 HTTP 客户端兼容性良好。示例代码:

String solrServerUrl = "http://localhost:8983/solr/" + coreName;
HttpSolrClient solrClient = new HttpSolrClient.Builder(solrServerUrl).build();

// 文档添加逻辑不变
SolrInputDocument document1 = new SolrInputDocument();
document1.addField("id", "1");
SolrInputDocument document2 = new SolrInputDocument();
document2.addField("id", "2");
solrClient.add(Arrays.asList(document1, document2));
solrClient.commit();

2. 临时 workaround(不推荐生产环境)

如果必须使用嵌入式服务器,可以尝试引入旧版的 javax.ws.rs API 依赖,但这会与 Spring Boot 3.x 的 Jakarta 依赖产生冲突,可能引发其他潜在问题:

<dependency>
    <groupId>javax.ws.rs</groupId>
    <artifactId>javax.ws.rs-api</artifactId>
    <version>2.1.1</version>
</dependency>

3. 等待官方适配

Solr 社区正在推进 Jakarta EE 的迁移工作,后续版本可能会完成对 jakarta.* 包的全面支持,建议关注 Solr 官方版本更新日志。

内容的提问来源于stack exchange,提问作者King Midas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 19:50:07