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

Spring Boot混编Kotlin遇java.lang.NoSuchMethodError问题求助

Spring Boot混合Kotlin项目运行时NoSuchMethodError异常分析与解决

问题描述

我有一个Java Spring Boot项目,混合使用Kotlin开发,执行Apollo GraphQL mutation操作时触发运行时异常,不清楚异常原因及解决办法。

异常栈信息

Caused by: java.lang.NoSuchMethodError: 'void kotlin.jvm.internal.FunctionReferenceImpl.<init>(int, java.lang.Class, java.lang.String, java.lang.String, int)'
    at kotlinx.coroutines.flow.internal.SafeCollectorKt$emitFun$1.<init>(SafeCollector.kt) ~[kotlinx-coroutines-core-jvm-1.6.4.jar:na]
    at kotlinx.coroutines.flow.internal.SafeCollectorKt$emitFun$1.<clinit>(SafeCollector.kt) ~[kotlinx-coroutines-core-jvm-1.6.4.jar:na]
    at kotlinx.coroutines.flow.internal.SafeCollectorKt.<clinit>(SafeCollector.kt:15) ~[kotlinx-coroutines-core-jvm-1.6.4.jar:na]
    at kotlinx.coroutines.flow.internal.SafeCollector.emit(SafeCollector.kt:87) ~[kotlinx-coroutines-core-jvm-1.6.4.jar:na]
    at kotlinx.coroutines.flow.internal.SafeCollector.emit(SafeCollector.kt:66) ~[kotlinx-coroutines-core-jvm-1.6.4.jar:na]
    at com.apollographql.apollo3.network.http.HttpNetworkTransport$execute$1.invokeSuspend(HttpNetworkTransport.kt:83) ~[apollo-runtime-jvm-3.7.4.jar:3.7.4]
    at com.apollographql.apollo3.network.http.HttpNetworkTransport$execute$1.invoke(HttpNetworkTransport.kt) ~[apollo-runtime-jvm-3.7.4.jar:3.7.4]
    at com.apollographql.apollo3.network.http.HttpNetworkTransport$execute$1.invoke(HttpNetworkTransport.kt) ~[apollo-runtime-jvm-3.7.4.jar:3.7.4]
    at kotlinx.coroutines.flow.SafeFlow.collectSafely(Builders.kt:61) ~[kotlinx-coroutines-core-jvm-1.6.4.jar:na]
    at kotlinx.coroutines.flow.AbstractFlow.collect(Flow.kt:230) ~[kotlinx-coroutines-core-jvm-1.6.4.jar:na]

触发异常的代码

val response = runBlocking {
    apolloClient.mutation(
      UpdateCuratedCollectionMutation(
        input = curatedCollectionInput,
        version = collection.updatedAt.toEpochSecond()
      )
    ).execute()
}

项目依赖配置(Gradle)

springBootVersion = '2.7.4'
id "org.jetbrains.kotlin.jvm" version "1.8.10"
id "com.apollographql.apollo3" version "3.7.4"
id 'org.jetbrains.kotlin.plugin.lombok' version '1.8.10'
id 'io.freefair.lombok' version '5.3.0'
implementation 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.10'
implementation "com.apollographql.apollo3:apollo-runtime:3.7.4"

原因分析

这个NoSuchMethodError本质是Kotlin版本与协程库版本不兼容:

  • 项目使用Kotlin 1.8.10,但间接依赖的kotlinx-coroutines-core版本为1.6.4,该版本的协程库是基于旧版Kotlin编译的。
  • Kotlin内部的FunctionReferenceImpl构造方法签名在版本迭代中发生了变更,旧版协程库调用了新版Kotlin中已不存在的构造方法,导致运行时找不到方法。

解决方案

1. 升级kotlinx-coroutines-core版本

将协程库升级到与Kotlin 1.8.10兼容的版本,推荐使用1.7.3(该版本完美适配Kotlin 1.8.x)。在Gradle中添加或更新依赖:

implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-spring:1.7.3" // 若需Spring整合支持则添加

2. 统一所有Kotlin相关依赖版本

确保项目中所有Kotlin插件、核心依赖版本一致,避免间接依赖引入冲突:

  • 执行Gradle命令排查Kotlin依赖冲突:
./gradlew dependencyInsight --dependency org.jetbrains.kotlin:kotlin-stdlib-jdk8
  • 若发现旧版Kotlin依赖,在build.gradle中强制统一版本:
configurations.all {
    resolutionStrategy {
        force "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.10"
        force "org.jetbrains.kotlin:kotlin-reflect:1.8.10"
    }
}

3. 验证Apollo GraphQL版本兼容性

确认Apollo 3.7.4是否兼容Kotlin 1.8.10,若存在兼容性问题,可升级Apollo版本到支持Kotlin 1.8.x的最新稳定版,或调整Kotlin版本至Apollo官方支持的范围。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 16:40:05