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

Android项目guava包重复类com.google.common报错无法运行如何解决

Guava依赖重复类报错解决方案

你遇到的报错内容如下:

模块jetified-guava-27.1-android (com.google.guava:guava:27.1-android) 与 jetified-guava-jdk5-17.0 (com.google.guava:guava-jdk5:17.0) 中存在大量重复类,包含com.google.common.annotations.Beta、com.google.common.annotations.GwtCompatible、com.google.common.base.Absent、com.google.common.base.AbstractIterator、com.google.common.base.Ascii、com.google.common.base.CaseFormat、com.google.common.base.CharMatcher等全系列com.google.common包下的同名类

核心原因

项目的传递依赖同时引入了两个不同分支的Guava库:com.google.guava:guava:27.1-android 是适配高版本JDK/Android环境的主流维护版本,com.google.guava:guava-jdk5:17.0 是已停止维护的JDK5兼容分支,二者包名完全一致导致类重复冲突。

解决方案

可根据项目技术栈选择对应处理方式:

方案1:全局排除废弃的guava-jdk5(推荐)

该方案适配绝大多数场景,直接移除无维护价值的旧分支依赖即可:

Gradle项目配置

在根目录build.gradle的allprojects配置块中添加规则:

allprojects {
    configurations {
        all {
            // 全局排除已废弃的guava-jdk5分支
            exclude group: 'com.google.guava', module: 'guava-jdk5'
        }
    }
}

Maven项目配置

在pom.xml的dependencyManagement节点中添加规则:

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>com.google.guava</groupId>
      <artifactId>guava-jdk5</artifactId>
      <version>17.0</version>
      <exclusions>
        <exclusion>
          <groupId>*</groupId>
          <artifactId>*</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
  </dependencies>
</dependencyManagement>

方案2:全局锁定Guava版本

如果需要保留统一版本的Guava,可强制指定项目内所有Guava依赖的版本:

Gradle项目配置

allprojects {
    configurations.all {
        resolutionStrategy {
            // 强制全局使用指定版本的Guava
            force 'com.google.guava:guava:27.1-android'
        }
    }
}

Maven项目配置

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>com.google.guava</groupId>
      <artifactId>guava</artifactId>
      <version>27.1-android</version>
    </dependency>
  </dependencies>
</dependencyManagement>

方案3:针对性排除传递依赖

如果全局调整存在兼容性风险,可以先定位guava-jdk5的引入来源,再做定向排除:

  • Gradle项目执行命令查询依赖树:./gradlew dependencies | grep guava-jdk5
  • Maven项目执行命令查询依赖树:mvn dependency:tree | grep guava-jdk5
    找到引入guava-jdk5的父依赖后,仅在该依赖的声明中添加排除规则即可,Gradle示例:
dependencies {
    implementation('对应父依赖的groupId:artifactId:版本号') {
        exclude group: 'com.google.guava', module: 'guava-jdk5'
    }
}

生效验证

配置完成后重新执行项目构建,检查依赖树确认仅存在一个Guava版本,即可解决重复类报错。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 23:18:02