Kotlin协程调用delay()函数抛出java.lang.NoSuchMethodError如何解决
问题根因
你遇到的NoSuchMethodError是kotlinx-coroutines依赖版本冲突导致的:
delay-p9JZ4hM是kotlinx-coroutines 1.6.0及以上版本对delay函数做二进制优化后的带签名方法名,低版本的coroutines运行库没有这个方法- 你的项目里Ktor依赖的coroutines版本,和你手动引入的coroutines版本不一致:编译代码时用的是高版本的coroutines API,实际运行时加载的是低版本的coroutines jar包,调用
delay时就会找不到对应方法 - 移除
delay后代码正常运行,是因为逻辑里没有触发到新版本coroutines才有的方法,不会暴露版本冲突问题
修复步骤
- 先排查项目依赖树,找出冲突的coroutines版本:
- Gradle项目执行:
./gradlew dependencies | grep kotlinx-coroutines - Maven项目执行:
mvn dependency:tree | grep kotlinx-coroutines
- Gradle项目执行:
- 统一所有coroutines相关依赖的版本,建议直接对齐你当前用的Ktor版本要求的coroutines版本,不要单独指定更低版本的coroutines依赖
- 可选优化:你当前代码每次循环都新建、销毁
HttpClient会产生不必要的资源开销,建议把HttpClient改为类成员变量,初始化一次即可重复使用。
内容的提问来源于stack exchange,提问作者Dan Largo
相关产品推荐
相关产品推荐

