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

Drools全局变量使用报错求助:已声明却无法调用全局变量

问题原因及解决方案

你的DRL代码错误在于全局变量声明后直接在文件顶层执行Java语句——Drools的DRL有严格的结构规范,文件顶层仅允许放置全局变量、规则、函数等声明类内容,所有执行逻辑必须放在规则的then块内部。

修正后的DRL代码

global Boolean testValue

rule "Check Global Variable"
    when
        // 若无需匹配特定业务事实,用eval(true)确保规则触发
        eval(true)
    then
        System.out.println("Global testValue: " + testValue);
end

关键注意事项

  • 全局变量仅能在规则的then执行块或规则内部的可执行代码区域访问,不能直接在文件顶层调用
  • 若规则不需要匹配特定事实,添加eval(true)作为条件,保证规则会被触发执行
  • 确认赋值全局变量的代码正确绑定到KieSession,示例Java代码:
    KieSession kieSession = kieContainer.newKieSession();
    // 变量名需与DRL中声明的完全一致
    kieSession.setGlobal("testValue", Boolean.TRUE);
    kieSession.fireAllRules();
    kieSession.dispose();
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 09:24:50