gradle - 当我升级到 Kotlin 1.3.30 时,为什么 Kotlin JSR223 脚本停止工作

标签 gradle kotlin

在使用 javax.script scripting support added in 1.1 的项目中在其单元测试中,将 Kotlin 语言版本从 1.3.21 升级到 1.3.30 导致这些测试失败,但出现以下异常:

java.lang.NoClassDefFoundError: org/jetbrains/kotlin/scripting/compiler/plugin/ScriptingCompilerConfigurationComponentRegistrar
        at org.jetbrains.kotlin.script.jsr223.KotlinJsr223JvmLocalScriptEngine.makeCompilerConfiguration(KotlinJsr223JvmLocalScriptEngine.kt:72)
        at org.jetbrains.kotlin.script.jsr223.KotlinJsr223JvmLocalScriptEngine.access$makeCompilerConfiguration(KotlinJsr223JvmLocalScriptEngine.kt:38)
        at org.jetbrains.kotlin.script.jsr223.KotlinJsr223JvmLocalScriptEngine$replCompiler$2.invoke(KotlinJsr223JvmLocalScriptEngine.kt:49)
        at org.jetbrains.kotlin.script.jsr223.KotlinJsr223JvmLocalScriptEngine$replCompiler$2.invoke(KotlinJsr223JvmLocalScriptEngine.kt:38)
        at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
        at org.jetbrains.kotlin.script.jsr223.KotlinJsr223JvmLocalScriptEngine.getReplCompiler(KotlinJsr223JvmLocalScriptEngine.kt)
        at org.jetbrains.kotlin.script.jsr223.KotlinJsr223JvmLocalScriptEngine$localEvaluator$2.invoke(KotlinJsr223JvmLocalScriptEngine.kt:53)
        at org.jetbrains.kotlin.script.jsr223.KotlinJsr223JvmLocalScriptEngine$localEvaluator$2.invoke(KotlinJsr223JvmLocalScriptEngine.kt:38)
        at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
        at org.jetbrains.kotlin.script.jsr223.KotlinJsr223JvmLocalScriptEngine.getLocalEvaluator(KotlinJsr223JvmLocalScriptEngine.kt)
        at org.jetbrains.kotlin.script.jsr223.KotlinJsr223JvmLocalScriptEngine.getReplEvaluator(KotlinJsr223JvmLocalScriptEngine.kt:55)
        at org.jetbrains.kotlin.script.jsr223.KotlinJsr223JvmLocalScriptEngine.createState(KotlinJsr223JvmLocalScriptEngine.kt:59)
        at org.jetbrains.kotlin.cli.common.repl.KotlinJsr223JvmScriptEngineBase.createState$default(KotlinJsr223JvmScriptEngineBase.kt:46)
        at org.jetbrains.kotlin.cli.common.repl.KotlinJsr223JvmScriptEngineBase.getCurrentState(KotlinJsr223JvmScriptEngineBase.kt:53)
        at org.jetbrains.kotlin.cli.common.repl.KotlinJsr223JvmScriptEngineBase.nextCodeLine(KotlinJsr223JvmScriptEngineBase.kt:44)
        at org.jetbrains.kotlin.cli.common.repl.KotlinJsr223JvmScriptEngineBase.compileAndEval(KotlinJsr223JvmScriptEngineBase.kt:59)
        at org.jetbrains.kotlin.cli.common.repl.KotlinJsr223JvmScriptEngineBase.eval(KotlinJsr223JvmScriptEngineBase.kt:31)
build.gradle中的相关行是:
dependencies {
    // ... other stuff ...
    testCompile "org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version"
    testCompile "org.jetbrains.kotlin:kotlin-compiler-embeddable:$kotlin_version"
    testCompile "org.jetbrains.kotlin:kotlin-script-util:$kotlin_version"
}

哪里ext.kotlin_version要么是 "1.3.21""1.3.30" .

为什么会中断,我该如何解决?

最佳答案

它失败是因为 JetBrains 已将脚本功能重构为插件,并且通过 JSR223 成功运行 Kotlin 脚本所需的依赖项已更改。

Kotlin 错误跟踪器的相关问题是 KT-30972 ,已作为 KT-30986 的副本关闭.

结果是,您需要调整依赖项以包含 kotlin-scripting-compiler-embeddable .

dependencies {
    // ... other stuff ...
    testCompile "org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version"
    testCompile "org.jetbrains.kotlin:kotlin-compiler-embeddable:$kotlin_version"
    testCompile "org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:$kotlin_version"
    testCompile "org.jetbrains.kotlin:kotlin-script-util:$kotlin_version"
}

关于gradle - 当我升级到 Kotlin 1.3.30 时,为什么 Kotlin JSR223 脚本停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55801355/

相关文章:

Android testCompile 项目不工作

gradle - 如何使用SerenityRunner和Gradle运行带有 'WithTagValuesOf'注释的特定测试

android - 导航组件 - onSupportNavigateUp()

ftp - 如何使用Kotlin在android studio中使用FTP上传小文件或图片

android - Lint 改进后的可运行时崩溃

android - 以 20 个 kotlin block 的形式迭代字符串的字符

android - 从最终APK中删除资源文件

java - Android Studio gradle 构建失败 : could not find bundletools. jar(com.android.tools.build:bundletools:010-alpha01)

android - 基于 BuildType 的 Gradle 模块替换

configuration - 如何在 Kotlin for TeamCity 中隐藏自定义构建步骤中的参数?