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

SolrJ 9.3.0升级依赖冲突及测试异常问题求助

SolrJ 8.11.2 升级到9.3.0 问题解决指南

问题1:索引库测试失败(找不到Jetty类+Mockito无法mock final类)

1.1 解决org.eclipse.jetty.http.HttpFields$Mutable找不到的问题

SolrJ 9.x依赖的Jetty版本(Jetty 11+)和8.x(依赖Jetty 9/10)差异很大,HttpFields$Mutable在高版本Jetty里已经被重构或路径变更。解决步骤:

  • 执行mvn dependency:tree查看依赖树,找出冲突的旧版本Jetty依赖,在对应依赖中排除旧Jetty包。
  • 在索引库的pom.xml里通过dependencyManagement锁定Jetty版本为SolrJ 9.3.0对应的版本(可查SolrJ 9.3.0的pom确认,通常是Jetty 11.0.15左右):
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-bom</artifactId>
                <version>11.0.15</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    
  • 检查测试范围依赖,确保没有引入旧Jetty包,必要时显式声明正确的Jetty测试依赖。

1.2 解决Mockito无法mock final类Http2SolrClient的问题

SolrJ 9.x里Http2SolrClient被改成了final类,Mockito默认不支持mock final类,二选一解决:

  1. 添加mockito-inline测试依赖:
    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-inline</artifactId>
        <version>4.x及以上兼容版本</version>
        <scope>test</scope>
    </dependency>
    
  2. 创建Mockito扩展配置:
    • 在src/test/resources下新建mockito-extensions目录
    • 新建文件org.mockito.plugins.MockMaker,仅写入一行内容:mock-maker-inline

问题2:具体实现工程自动引入SolrJ 8.11.2导致NoSuchMethodError

核心是Maven依赖传递优先级问题,某个依赖间接引入了8.11.2版本,且优先级高于索引库的9.3.0。解决步骤:

  1. 强制锁定SolrJ版本:在具体实现工程的pom.xml的dependencyManagement中显式指定9.3.0,确保所有传递依赖用该版本:
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.apache.solr</groupId>
                <artifactId>solr-solrj</artifactId>
                <version>9.3.0</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
    
  2. 定位冲突来源:执行mvn dependency:tree -Dverbose -Dincludes=org.apache.solr:solr-solrj,找到引入8.11.2的依赖,然后在该依赖中排除旧版SolrJ:
    <dependency>
        <groupId>冲突依赖的groupId</groupId>
        <artifactId>冲突依赖的artifactId</artifactId>
        <version>xxx</version>
        <exclusions>
            <exclusion>
                <groupId>org.apache.solr</groupId>
                <artifactId>solr-solrj</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    
  3. 检查索引库pom:确保SolrJ 9.3.0的依赖是compile范围,没有被设为provided或其他会导致传递失效的范围。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 22:22:41