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

升级solr-solrj-8.11.3后出现KeeperException$NoNodeException类未找到异常

SolrJ升级至8.11.3后出现NoClassDefFoundError的解决办法

问题背景

原Java应用使用solr-solrj-6.6.1.jar与Apache Solr 8/9通信,因安全漏洞升级到solr-solrj-8.11.3.jar后编译成功,但运行时无法获取任何集合,抛出如下异常:

2024-05-15; 16:03:40.800 ***** exception: (hash:376089095) java.lang.NoClassDefFoundError: org/apache/zookeeper/KeeperException$NoNodeException
at org.apache.solr.client.solrj.impl.HttpSolrClient.executeMethod(HttpSolrClient.java:698)
at org.apache.solr.client.solrj.impl.HttpSolrClient.request(HttpSolrClient.java:266)
at org.apache.solr.client.solrj.impl.HttpSolrClient.request(HttpSolrClient.java:248)
at org.apache.solr.client.solrj.SolrRequest.process(SolrRequest.java:225)
at org.apache.solr.client.solrj.SolrRequest.process(SolrRequest.java:242)

原因分析

SolrJ 8.x版本的HttpSolrClient内部隐式依赖ZooKeeper相关类(即使仅使用HTTP连接方式),升级后项目缺失对应的ZooKeeper依赖包,导致运行时类加载失败。

解决方案

方案1:引入完整SolrJ依赖(推荐)

如果使用Maven管理依赖,直接引入solr-solrj即可自动拉取兼容的ZooKeeper依赖:

<dependency>
    <groupId>org.apache.solr</groupId>
    <artifactId>solr-solrj</artifactId>
    <version>8.11.3</version>
</dependency>

若手动管理jar包,需从Solr 8.11.3官方发布包中提取对应的zookeeper.jar(适配版本通常为3.4.14),添加到项目classpath中。

方案2:排除ZooKeeper依赖(仅确认无需ZooKeeper功能时使用)

若明确仅使用HTTP连接,无ZooKeeper相关需求,可在Maven中排除ZooKeeper依赖:

<dependency>
    <groupId>org.apache.solr</groupId>
    <artifactId>solr-solrj</artifactId>
    <version>8.11.3</version>
    <exclusions>
        <exclusion>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
        </exclusion>
    </exclusions>
</dependency>

注意:此方式存在潜在风险,若SolrJ内部逻辑隐式依赖ZooKeeper类,仍可能触发报错,优先选择方案1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 01:02:39