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

Karate 1.4.0读取.properties文件报错:GraalVM多语言异常

Karate 1.4.0 读取Classpath下Properties文件报错的解决办法

问题背景

在Karate 0.9.6版本中,以下代码可正常加载classpath下的karate.properties文件:

def stream = read('classpath:karate.properties')
def props = new java.util.Properties()
eval props.load(stream)

但升级至Karate 1.4.0后,执行时抛出文件未找到错误:

js failed: 01: read('classpath:karate.properties')
org.graalvm.polyglot.PolyglotException: not found: karate.properties

错误栈信息:

  • com.intuit.karate.resource.ResourceUtils.getResource(ResourceUtils.java:126)
  • com.intuit.karate.core.ScenarioFileReader.toResource(ScenarioFileReader.java:129)
  • com.intuit.karate.core.ScenarioFileReader.readFileAsStream(ScenarioFileReader.java:99)
  • com.intuit.karate.core.ScenarioFileReader.readFile(ScenarioFileReader.java:76)
  • com.intuit.karate.core.ScenarioEngine.lambda$new$0(ScenarioEngine.java:121)
  • .:program(Unnamed:1)

原因分析

Karate 1.x版本全面切换至GraalJS作为JavaScript引擎,同时调整了read方法的行为逻辑:旧版本中read('classpath:xxx')直接返回文件输入流,新版本中read会根据文件类型自动解析内容(比如Properties文件会直接转为Map对象),资源路径的解析规则也有变化。

解决方案

方案1:使用Karate内置的Properties解析(推荐)

Karate 1.x支持直接读取Properties文件并转为Map,无需手动调用Java API加载,代码简化为:

def props = read('classpath:karate.properties')

之后可直接通过props.keyName的方式访问配置项。

方案2:兼容旧逻辑(保留Java API加载)

如果必须保留原有的java.util.Properties加载逻辑,需改用Karate提供的karate.resource()方法获取输入流:

def stream = karate.resource('karate.properties').getInputStream()
def props = new java.util.Properties()
props.load(stream)

方案3:全局配置加载

若需在所有Feature文件中共享配置,可在karate-config.js中提前加载:

var props = read('classpath:karate.properties');
config.props = props;

后续在Feature文件中直接引用props.keyName即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 08:52:43