运行Karate测试时遇js.experimental-foreign-object-prototype错误求助
问题描述
运行Karate测试时抛出如下异常:
java.lang.IllegalArgumentException: Could not find option with name js.experimental-foreign-object-prototype. Did you mean one of the following? js.foreign-object-prototype=<Boolean> at org.graalvm.truffle/com.oracle.truffle.polyglot.PolyglotEngineException.illegalArgument(PolyglotEngineException.java:131)
本地已安装GraalVM 22并包含JS组件,相同测试在服务器上可正常运行,怀疑是本地缺少相关配置项导致。
解决方法
这个错误源于GraalVM版本迭代带来的配置选项名称变更:
- 旧版GraalVM中,启用外部对象原型的选项为
js.experimental-foreign-object-prototype - GraalVM 22及以上版本中,该选项已简化为
js.foreign-object-prototype,移除了experimental-前缀
按以下步骤调整即可解决:
- 修改JVM启动参数:若通过命令行运行测试,将原参数
--js.experimental-foreign-object-prototype=true替换为--js.foreign-object-prototype=true - 调整Karate配置:若在Karate配置文件或代码中指定了该选项,将配置项名称从
js.experimental-foreign-object-prototype改为js.foreign-object-prototype,并设置为布尔值(true/false) - 验证JS组件完整性:执行
gu list命令检查GraalVM组件,确保输出中包含org.graalvm.js
服务器能正常运行的原因大概率是其使用的GraalVM版本低于22,仍兼容旧的选项名称,而本地22+版本已废弃带experimental-前缀的配置项。
内容的提问来源于stack exchange,提问作者Awanish Tiwari
相关产品推荐
相关产品推荐

