首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么当我升级到Kotlin 1.3.30时Kotlin JSR223脚本停止工作

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

Stack Overflow用户
提问于 2019-04-23 05:29:08
回答 2查看 1.1K关注 0票数 4

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

代码语言:javascript
运行
复制
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中的相关行是:

代码语言:javascript
运行
复制
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"

为什么它坏了,我该如何修复它?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-23 05:29:08

它之所以失败,是因为JetBrains已经将脚本功能重构为一个插件,并且通过JSR223成功运行Kotlin脚本所需的依赖关系也发生了变化。

Kotlin bug跟踪器上的相关问题是KT-30972,它被关闭为KT-30986的副本。

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

代码语言:javascript
运行
复制
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"
}
票数 3
EN

Stack Overflow用户

发布于 2021-05-15 06:38:13

现在的工作版本很简单:

代码语言:javascript
运行
复制
dependencies {
    runtimeOnly("org.jetbrains.kotlin:kotlin-scripting-jsr223:${Deps.JetBrains.Kotlin.VERSION}")
}

它传递性地引入所有必要的依赖项。

此外,如果这样做,META-INF/services/javax.script.ScriptEngineFactory文件似乎也不是必需的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55801355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档