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

使用Arrow Analysis抛出NoSuchMethod异常,是否需特定JVM/Kotlin版本?

问题描述

尝试使用Arrow Analysis实现编译时异常捕获,按官方文档操作后,执行Gradle构建时抛出大量运行时异常。

测试代码

fun main() {
    val wrong = emptyList<Int>().get(2)
}

Gradle构建脚本

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

plugins {
    kotlin("jvm") version "1.7.10"
}
group = "org.example"
version = "1.0-SNAPSHOT"
repositories {
    mavenCentral()
}
dependencies {
    implementation("io.arrow-kt:arrow-core:1.1.2")
}
buildscript {
    dependencies {
        classpath("io.arrow-kt.analysis.kotlin:io.arrow-kt.analysis.kotlin.gradle.plugin:2.0")
    }
}
apply(plugin = "io.arrow-kt.analysis.kotlin")
tasks.withType<KotlinCompile> {
    kotlinOptions.jvmTarget = "1.8"
}

构建错误日志

java.lang.NoSuchMethodError: 'org.jetbrains.kotlin.psi.KtExpression org.jetbrains.kotlin.resolve.calls.callUtil.CallUtilKt.getReceiverExpression(org.jetbrains.kotlin.resolve.calls.model.ResolvedCall)'
    at arrow.meta.plugins.analysis.phases.analysis.solver.ast.kotlin.KotlinResolvedCall.getReceiverExpression(KotlinResolvedCall.kt:37)
    at arrow.meta.plugins.analysis.phases.analysis.solver.ResolvedCallUtilsKt.allArgumentExpressions(ResolvedCallUtils.kt:75)
    at arrow.meta.plugins.analysis.phases.analysis.solver.ResolvedCallUtilsKt.arg(ResolvedCallUtils.kt:119)
    at arrow.meta.plugins.analysis.phases.analysis.solver.check.ExpressionsKt.controlFlowAnyFunction(Expressions.kt:438)
    at arrow.meta.plugins.analysis.phases.analysis.solver.check.ExpressionsKt.checkCallExpression(Expressions.kt:397)
    at arrow.meta.plugins.analysis.phases.analysis.solver.check.ExpressionsKt.fallThrough(Expressions.kt:260)
    at arrow.meta.plugins.analysis.phases.analysis.solver.check.ExpressionsKt.access$fallThrough(Expressions.kt:1)
    at arrow.meta.plugins.analysis.phases.analysis.solver.check.ExpressionsKt$checkExpressionConstraints$2.invoke(Expressions.kt:244)
    at arrow.meta.plugins.analysis.phases.analysis.solver.check.ExpressionsKt$checkExpressionConstraints$2.invoke(Expressions.kt:157)
    at arrow.meta.continuations.ContSeq$flatMap$1.invokeSuspend(ContSeq.kt:60)
    at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
    // 省略后续重复栈跟踪内容
    at java.base/java.lang.Thread.run(Thread.java:833)

疑问

使用Arrow Analysis是否需要特定的JVM版本或Kotlin版本?


解决方案

这个NoSuchMethodError本质是Arrow Analysis插件与Kotlin版本不兼容导致的API调用失败,同时JVM版本也有明确要求:

1. Kotlin版本匹配规则

Arrow Analysis插件对Kotlin版本有严格依赖,不同插件版本对应固定的Kotlin版本范围:

  • Arrow Analysis 2.0版本要求Kotlin版本为1.8.0及以上,你当前使用的Kotlin 1.7.10不符合要求,这是报错的核心原因。
  • 若要保留Kotlin 1.7.x版本,需将Arrow Analysis插件降级到1.4.4,该版本兼容Kotlin 1.7系列。

2. JVM版本要求

  • Arrow Analysis 2.x版本要求JDK 11及以上;如果使用JDK 8,必须搭配Arrow Analysis 1.x版本。
  • 你的构建脚本中jvmTarget设为1.8,若运行环境为JDK 11+,该配置可保留,但JDK版本需满足插件要求。

修正后的Gradle配置示例

方案1:升级Kotlin到兼容版本(推荐)

plugins {
    kotlin("jvm") version "1.8.22" // 升级到Arrow Analysis 2.0兼容的Kotlin版本
}
group = "org.example"
version = "1.0-SNAPSHOT"
repositories {
    mavenCentral()
}
dependencies {
    implementation("io.arrow-kt:arrow-core:1.1.2")
}
buildscript {
    dependencies {
        classpath("io.arrow-kt.analysis.kotlin:io.arrow-kt.analysis.kotlin.gradle.plugin:2.0")
    }
}
apply(plugin = "io.arrow-kt.analysis.kotlin")
tasks.withType<KotlinCompile> {
    kotlinOptions.jvmTarget = "1.8"
}

方案2:降级插件适配现有Kotlin版本

plugins {
    kotlin("jvm") version "1.7.10"
}
group = "org.example"
version = "1.0-SNAPSHOT"
repositories {
    mavenCentral()
}
dependencies {
    implementation("io.arrow-kt:arrow-core:1.1.2")
}
buildscript {
    dependencies {
        classpath("io.arrow-kt.analysis.kotlin:io.arrow-kt.analysis.kotlin.gradle.plugin:1.4.4") // 降级插件版本
    }
}
apply(plugin = "io.arrow-kt.analysis.kotlin")
tasks.withType<KotlinCompile> {
    kotlinOptions.jvmTarget = "1.8"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 20:48:20