gpt4 book ai didi

java - 在从 Maven 运行的测试中使用 Kotlin `ScriptException` 时获取 `ScriptEngine`

转载 作者:行者123 更新时间:2023-12-04 08:38:51 25 4
gpt4 key购买 nike

在一个 Maven 项目中,我有使用 Kotlin ScriptEngine 的测试。 (只需调用 scriptEngine.eval(script) )。当我从 IntelliJ 运行测试时,它们都通过了,但是在运行 mvn test 期间,我收到以下错误:

javax.script.ScriptException: Cannot access script base class 'kotlin.script.experimental.jsr223.KotlinJsr223DefaultScript'. Check your module classpath for missing or conflicting dependencies
Cannot access script provided property class 'kotlin.script.experimental.jvmhost.jsr223.KotlinJsr223ScriptEngineImpl'. Check your module classpath for missing or conflicting dependencies
Cannot access script provided property class 'org.jetbrains.kotlin.cli.common.repl.AggregatedReplStageState'. Check your module classpath for missing or conflicting dependencies
我通过适当的 Maven 依赖项在类路径中有这三个类。 (实际上,我在失败的测试中添加了对 System.out.println(KotlinJsr223DefaultScript.class.getName()) 的调用以确保确实如此。)这是依赖关系树的相关片段:
[INFO] |  \- org.jetbrains.kotlin:kotlin-scripting-jsr223:jar:1.3.72:compile
[INFO] | +- org.jetbrains.kotlin:kotlin-script-runtime:jar:1.3.72:compile
[INFO] | +- org.jetbrains.kotlin:kotlin-scripting-common:jar:1.3.72:compile
[INFO] | | \- org.jetbrains.kotlinx:kotlinx-coroutines-core:jar:1.2.1:compile
[INFO] | +- org.jetbrains.kotlin:kotlin-scripting-jvm:jar:1.3.72:compile
[INFO] | +- org.jetbrains.kotlin:kotlin-scripting-jvm-host:jar:1.3.72:compile
[INFO] | | \- org.jetbrains.intellij.deps:trove4j:jar:1.0.20181211:runtime
[INFO] | +- org.jetbrains.kotlin:kotlin-scripting-compiler:jar:1.3.72:compile
[INFO] | | +- org.jetbrains.kotlin:kotlin-scripting-js:jar:1.3.72:compile
[INFO] | | +- org.jetbrains.kotlin:kotlin-util-klib:jar:1.3.72:compile
[INFO] | | | \- org.jetbrains.kotlin:kotlin-util-io:jar:1.3.72:compile
[INFO] | | \- org.jetbrains.kotlin:kotlin-scripting-compiler-impl:jar:1.3.72:compile
[INFO] | +- org.jetbrains.kotlin:kotlin-compiler:jar:1.3.72:runtime
[INFO] | \- org.jetbrains.kotlin:kotlin-reflect:jar:1.3.72:runtime
我看到互联网上的人遇到了类似的问题,但他们的解决方案是确保类在我已经拥有的类路径上可用。

最佳答案

我能够让单元测试在命令行上工作。问题是肯定会使用包含类路径的仅 list jar 的插件。出于某种原因,jar 列在该仅 list jar 中的顺序导致了 OP 上面描述的问题。我可以通过设置 surefire.useManifestOnlyJar=false 来解决这个问题, 在 pom.xml

<properties>
<surefire.useManifestOnlyJar>false</surefire.useManifestOnlyJar>
</properties>
或作为 Maven 的命令行参数:
mvn -Dsurefire.useManifestOnlyJar=false test
有关该属性的更多详细信息,请参阅
mvn surefire:help -Ddetail=true
这解决了我的问题。
还有关于使用surefire进行类加载的文档: https://maven.apache.org/surefire/maven-surefire-plugin/examples/class-loading.html

关于java - 在从 Maven 运行的测试中使用 Kotlin `ScriptException` 时获取 `ScriptEngine`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64655566/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com