Ktor 客户端 NoSuchMethodError

Ktor client NoSuchMethodError

我想编写一个电报机器人并为此使用 this library from Github。在这个电报机器人中,我需要向另一个服务发出一些请求,所以我想为此使用 ktor 客户端库。但是,当我尝试实例化 ktor httpClient 时,出现以下异常:

Exception in thread "main" java.lang.NoSuchMethodError: 'void io.ktor.util.collections.ConcurrentMap.<init>(io.ktor.util.Lock, int, int, kotlin.jvm.internal.DefaultConstructorMarker)'
at io.ktor.client.engine.cio.CIOEngine.<init>(CIOEngine.kt:32)
at io.ktor.client.engine.cio.CIO.create(CIOCommon.kt:23)
at io.ktor.client.HttpClientKt.HttpClient(HttpClient.kt:42)
at io.ktor.client.HttpClientJvmKt.HttpClient(HttpClientJvm.kt:21)
at io.ktor.client.HttpClientJvmKt.HttpClient$default(HttpClientJvm.kt)
at problem.ktor.MainKt.main(Main.kt:9)
at problem.ktor.MainKt.main(Main.kt)

我做了一个新项目并将问题缩小到电报机器人库,它显然与 kotr 库冲突。我假设 kotr 库存在一些版本冲突,因为那是异常发生的地方。 如何解决冲突?

这是一个最小的可重现示例。使用以下 build.gradle.kts 文件:

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
    application
    kotlin("jvm") version "1.4.30"
}

repositories {
    mavenCentral()
    maven(url = "https://jitpack.io")
}

dependencies {
    implementation("io.ktor:ktor-client-core:1.5.2")
    implementation("io.ktor:ktor-client-cio:1.5.2")
    implementation("com.github.kotlin-telegram-bot:kotlin-telegram-bot:6.0.4")
}

和运行以下最小主函数:

import io.ktor.client.*

fun main() {
    HttpClient()
}

也许重要,我用的是Java15.0.2.

有问题的依赖项是 com.github.kotlin-telegram-bot.kotlin-telegram-bot:webhook:6.0.4。作为解决方法,您可以排除它,因为它只是一个示例:

implementation("com.github.kotlin-telegram-bot:kotlin-telegram-bot:6.0.4") {
    exclude(module = "webhook")
}