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

使用JAR包删除Firestore数据库文档失败问题排查

解决Firestore打包JAR后抛出NoSuchMethodError的问题

这个错误的核心原因是Guava版本冲突——IntelliJ运行时会自动处理依赖优先级,拉取兼容的Guava版本,但打包成JAR时,旧版本的Guava可能被意外引入,导致找不到com.google.common.util.concurrent.MoreExecutors.directExecutor()方法(该方法在Guava 18.0及以上版本才存在)。

下面是具体的解决步骤:

1. 排查依赖冲突

首先用依赖分析工具找出项目中所有Guava的依赖实例:

  • 如果你用Maven,执行命令:
    mvn dependency:tree | grep guava
    
  • 如果你用Gradle,执行命令:
    ./gradlew dependencies | grep guava
    

查看输出结果,找出版本低于20.0的Guava依赖,通常是某个第三方库(比如旧版的Google API客户端)引入的。

2. 排除旧版本Guava并显式声明兼容版本

在你的构建文件中,排除冲突的旧版本Guava,同时显式添加一个与Firestore客户端兼容的Guava版本:

Maven示例(pom.xml)

<!-- 先排除Firestore依赖中自带的可能冲突的Guava -->
<dependency>
    <groupId>com.google.cloud</groupId>
    <artifactId>google-cloud-firestore</artifactId>
    <version>你的Firestore版本</version>
    <exclusions>
        <exclusion>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<!-- 显式声明兼容的Guava版本 -->
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>32.1.3-jre</version> <!-- 建议选Firestore官方文档推荐的版本,或与你的客户端版本匹配的版本 -->
</dependency>

Gradle示例(build.gradle)

dependencies {
    implementation('com.google.cloud:google-cloud-firestore:你的Firestore版本') {
        exclude group: 'com.google.guava', module: 'guava'
    }
    implementation 'com.google.guava:guava:32.1.3-jre'
}

3. 检查打包配置

如果使用maven-assembly-plugin或ShadowJar插件打包,确保配置中没有错误地覆盖或合并Guava类:

  • 对于ShadowJar,避免不必要的relocate配置,或者确保依赖优先级正确;
  • 对于Maven Assembly,确保打包时包含的是你声明的新版本Guava,而不是旧版本。

4. 验证打包结果

解压生成的JAR包,检查lib目录(或Spring Boot项目的BOOT-INF/lib)中的Guava JAR文件,确认版本是你指定的新版本,没有旧版本残留。

完成以上步骤后,重新打包并执行java -jar xxxxx.jar,应该就能解决这个方法找不到的错误了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:05:24