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

升级Kotlin到1.5.20后Dagger、Moshi的kapt编译失败问题咨询

问题根因

该错误是Kotlin 1.5.x版本配套的kotlinx-metadata-jvm、kotlin-stdlib等核心库内部API变更,与当前使用的Dagger、Moshi版本的kapt注解处理器依赖的旧版本API不兼容导致。你看到的运行时依赖版本统一是正常的,但kapt注解处理器的类路径是独立于应用运行时的,androidDependencies任务无法查询到该路径下的依赖冲突。

你提到的KotlinClassHeader构造方法废弃不会直接触发报错,实际原因是kapt类路径下同时存在kotlinx-metadata-jvm:0.2.0和0.3.0版本,类加载时优先加载了无对应构造方法的0.2.0版本,才抛出NoSuchMethodError。

解决方案

按优先级从高到低尝试以下方案:

方案1:强制统一kapt类路径依赖版本

在项目根目录的build.gradle中添加以下配置,强制所有kapt处理器使用匹配Kotlin 1.5.x的依赖版本:

allprojects {
    configurations.all { config ->
        // 针对kapt类路径单独强制依赖版本
        if (config.name.contains("kapt", ignoreCase = true)) {
            config.resolutionStrategy {
                force "org.jetbrains.kotlinx:kotlinx-metadata-jvm:0.3.0"
                force "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.5.21"
                force "org.jetbrains.kotlin:kotlin-reflect:1.5.21"
            }
        }
        // 全局统一所有Kotlin相关依赖版本
        resolutionStrategy {
            eachDependency { details ->
                if (details.requested.group == "org.jetbrains.kotlin") {
                    details.useVersion "1.5.21"
                }
            }
        }
    }
}

配置完成后执行./gradlew clean再重新构建即可。

方案2:升级适配Kotlin 1.5.x的注解处理器版本

该方案是长期兼容的最优解,将相关依赖升级到适配版本即可:

  • Dagger升级到2.39及以上版本,该版本开始完全兼容Kotlin 1.5.x的metadata API
  • Moshi及moshi-kotlin-codegen同步升级到1.13.0及以上版本
  • 若项目中直接依赖了kotlinpoet,同步升级到1.10.0及以上版本

方案3:临时降级Kotlin版本

如果以上两个方案都无法适配现有项目,可以临时将Kotlin版本回退到1.4.32,等所有依赖都完成Kotlin 1.5.x适配后再进行升级操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:15:03