You need to enable JavaScript to run this app. 使用Paging Library 3时Gradle报Kotlin协程重复类错误的问题咨询
优惠活动
大模型
产品
解决方案
定价
更多

使用Paging Library 3时Gradle报Kotlin协程重复类错误的问题咨询

项目构建报错场景说明
  • 已完成Paging Library 3全流程接入(包含自定义PagingSource、Flow数据流配置),但项目无法正常构建运行
  • 构建阶段抛出kotlinx.coroutines包下类重复定义错误:版本为1.4.1的kotlinx-coroutines-core-jvm模块中,AbstractCoroutine、Active、AwaitAll等多个协程核心类,同时被kotlinx-coroutines-core-jvm:1.4.1、kotlinx-coroutines-core:1.4.1两个依赖路径重复加载
  • 当前项目已配置的核心关联依赖:
    • kotlinx-coroutines-android:1.4.1
    • kotlinx-coroutines-core:1.4.1
    • androidx.paging:paging-runtime-ktx:3.0.0-alpha12
    • 依赖协程能力实现的图片压缩库id.zelory:compressor:3.0.0
  • 已尝试的无效操作与验证结论:
    • 曾尝试在引入paging依赖时配置排除kotlinx-coroutines-core-jvm模块,因Gradle依赖配置语法格式错误,触发app模块评估失败,提示找不到对应依赖配置方法
    • 测试验证:使用完全相同依赖配置的raywenderlich教程示例项目可正常运行,降级切换到Paging Library v2版本可规避该报错,但因需要使用Paging 3新特性,无法采用降级方案
报错根因
  • 问题本质是kotlinx-coroutines 1.4.x版本的构件拆分历史兼容问题:1.4.x版本开始协程将核心库拆分为平台专属构件,kotlinx-coroutines-core为聚合依赖,会传递引入同版本的kotlinx-coroutines-core-jvm构件
  • paging-runtime-ktx:3.0.0-alpha12、compressor:3.0.0这类库在对应版本的适配中,没有统一走聚合依赖的引入路径,而是直接硬编码引入了kotlinx-coroutines-core-jvm作为直接依赖
  • 当项目同时显式声明了kotlinx-coroutines-core:1.4.1,又通过paging、compressor的依赖链引入同版本的kotlinx-coroutines-core-jvm时,Gradle依赖解析环节会把两个同版本、同内容的构件同时纳入最终打包路径,直接触发类重复定义报错
  • 之前的排除操作生效失败,是因为排除规则的写法不符合Gradle依赖配置语法,没有正确将重复加载的jvm子模块从传递依赖链路中剔除
可直接落地的解决步骤
  • 修正Gradle依赖配置语法,从paging、compressor的传递依赖链路中,剔除重复加载的kotlinx-coroutines-core-jvm模块,正确写法参考:
    dependencies {
      // 显式声明协程依赖,保持版本固定
      implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.1"
      implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.1"
    
      // 为paging依赖配置正确的排除规则
      implementation("androidx.paging:paging-runtime-ktx:3.0.0-alpha12") {
          exclude group: "org.jetbrains.kotlinx", module: "kotlinx-coroutines-core-jvm"
      }
    
      // 为compressor库配置相同的排除规则,避免重复加载
      implementation("id.zelory:compressor:3.0.0") {
          exclude group: "org.jetbrains.kotlinx", module: "kotlinx-coroutines-core-jvm"
      }
    }
    
  • 增加全局协程版本强制约束,避免不同依赖传递引入版本不一致的协程构件,可在app模块build.gradle的最外层添加配置:
    configurations.all {
      // 强制锁定协程版本,消除版本差异导致的解析冲突
      resolutionStrategy.force "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.1"
      resolutionStrategy.force "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.1"
    }
    
  • 构建完成后验证依赖加载结果:
    执行Gradle依赖查询命令./gradlew app:dependencies --configuration releaseRuntimeClasspath | grep kotlinx-coroutines,确认输出结果中,kotlinx-coroutines-core-jvm仅作为kotlinx-coroutines-core的传递依赖出现,不存在被paging、compressor直接引入的重复加载路径

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.06 14:45:02