升级至Ktor 3.0.0-beta-1启动应用时出现Koin报错
Ktor 3.0.0-beta-1 + Koin 3.6.0-wasm-alpha2 启动报错解决方案
将Ktor升级至3.0.0-beta-1、Koin升级至3.6.0-wasm-alpha2后,应用启动触发NoSuchMethodError,错误核心是Koin内部调用了Ktor 3.0已移除的API。降级Ktor到2.3.7可恢复正常,完整错误栈如下:
Exception in thread "main" java.lang.NoSuchMethodError: 'io.ktor.events.Events io.ktor.server.application.ApplicationEnvironment.getMonitor()' at org.koin.ktor.plugin.KoinPluginKt.setupMonitoring(KoinPlugin.kt:54) at org.koin.ktor.plugin.KoinPluginKt$Koin$2.invoke(KoinPlugin.kt:38) at org.koin.ktor.plugin.KoinPluginKt$Koin$2.invoke(KoinPlugin.kt:35) at io.ktor.server.application.CreatePluginUtilsKt.setupPlugin(CreatePluginUtils.kt:300) at io.ktor.server.application.CreatePluginUtilsKt.createPluginInstance(CreatePluginUtils.kt:269) at io.ktor.server.application.CreatePluginUtilsKt.access$createPluginInstance(CreatePluginUtils.kt:1) at io.ktor.server.application.CreatePluginUtilsKt$createApplicationPlugin$2.install(CreatePluginUtils.kt:90) at io.ktor.server.application.CreatePluginUtilsKt$createApplicationPlugin$2.install(CreatePluginUtils.kt:83) at io.ktor.server.application.ApplicationPluginKt.install(ApplicationPlugin.kt:100) at com.plugins.DiKt.configureDi(Di.kt:10) at com.ApplicationKt.module(Application.kt:15) at com.ApplicationKt.module$default(Application.kt:12) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) at java.base/java.lang.reflect.Method.invoke(Method.java:578) at kotlin.reflect.jvm.internal.calls.CallerImpl$Method.callMethod(CallerImpl.kt:97) at kotlin.reflect.jvm.internal.calls.CallerImpl$Method$Static.call(CallerImpl.kt:106) at kotlin.reflect.jvm.internal.KCallableImpl.callDefaultMethod$kotlin_reflection(KCallableImpl.kt:215) at kotlin.reflect.jvm.internal.KCallableImpl.callBy(KCallableImpl.kt:112) at io.ktor.server.engine.internal.CallableUtilsKt.callFunctionWithInjection(CallableUtils.kt:120) at io.ktor.server.engine.internal.CallableUtilsKt.executeModuleFunction(CallableUtils.kt:36) at io.ktor.server.engine.EmbeddedServer$launchModuleByName$1.invoke(EmbeddedServerJvm.kt:349) at io.ktor.server.engine.EmbeddedServer$launchModuleByName$1.invoke(EmbeddedServerJvm.kt:348) at io.ktor.server.engine.EmbeddedServer.avoidingDoubleStartupFor(EmbeddedServerJvm.kt:373) at io.ktor.server.engine.EmbeddedServer.launchModuleByName(EmbeddedServerJvm.kt:348) at io.ktor.server.engine.EmbeddedServer.access$launchModuleByName(EmbeddedServerJvm.kt:27) at io.ktor.server.engine.EmbeddedServer$instantiateAndConfigureApplication$1.invoke(EmbeddedServerJvm.kt:329) at io.ktor.server.engine.EmbeddedServer$instantiateAndConfigureApplication$1.invoke(EmbeddedServerJvm.kt:327) at io.ktor.server.engine.EmbeddedServer.avoidingDoubleStartup(EmbeddedServerJvm.kt:355) at io.ktor.server.engine.EmbeddedServer.instantiateAndConfigureApplication(EmbeddedServerJvm.kt:327) at io.ktor.server.engine.EmbeddedServer.createApplication(EmbeddedServerJvm.kt:142) at io.ktor.server.engine.EmbeddedServer.start(EmbeddedServerJvm.kt:270) at io.ktor.server.cio.EngineMain.main(EngineMain.kt:25) at com.ApplicationKt.main(Application.kt:9) Process finished with exit code 1
错误原因
Ktor 3.0.0-beta-1作为预发布版本,调整了核心API:ApplicationEnvironment.getMonitor()方法被移除或重命名。而Koin的3.6.0-wasm-alpha2是针对Wasm场景的测试版本,尚未适配Ktor 3.0的API变更,导致依赖调用时找不到对应方法。
解决方案
- 临时降级Ktor:将Ktor版本回退到
2.3.7,保持与当前Koin版本的兼容性,这是最快速的解决方式 - 等待适配版本:等待Koin官方发布适配Ktor 3.0的稳定版本(或兼容的测试版)
- 尝试快照版本:若需继续使用Ktor 3.0 beta,可尝试切换到Koin的最新快照版本(注意快照版本可能存在稳定性问题)
内容的提问来源于stack exchange,提问作者ayitinya
相关产品推荐
相关产品推荐

