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

升级Drools从7.23.0.Final到7.73.0.Final遇Stream Closed错误求助

Drools升级至7.73.0.Final时BeanInstantiationException问题解决

问题描述

将drools-compiler、drools-core、drools-core-dynamic、drools-decisiontables等组件从7.23.0.Final升级到7.73.0.Final后,启动时出现以下错误:

org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.kie.api.runtime.KieContainer]: Factory method 'kieContainer' threw exception; nested exception is java.lang.RuntimeException: java.io.IOException: Stream Closed

当前使用的Maven依赖配置:

<dependency>
    <groupId>org.drools</groupId>
    <artifactId>drools-core</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.mvel</groupId>
            <artifactId>mvel2</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>org.drools</groupId>
    <artifactId>drools-compiler</artifactId>
    <exclusions>
        <exclusion>
            <groupId>com.google.protobuf</groupId>
            <artifactId>protobuf-java</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.drools</groupId>
    <artifactId>drools-templates</artifactId>
</dependency>
<dependency>
    <groupId>org.drools</groupId>
    <artifactId>drools-decisiontables</artifactId>
    <exclusions>
        <exclusion>
            <groupId>javax.xml.stream</groupId>
            <artifactId>stax-api</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.kie</groupId>
    <artifactId>kie-api</artifactId>
</dependency>
<dependency>
        <groupId>org.drools</groupId>
        <artifactId>drools-bom</artifactId>
        <type>pom</type>
        <version>7.73.0.Final</version>
 </dependency>

解决方法

  • 修正BOM依赖的引入方式
    Drools BOM需要放在<dependencyManagement>节点下才能统一管理所有Drools/Kie组件的版本,否则其他未指定版本的依赖可能拉取旧版或不一致的版本,导致冲突。调整后的配置示例:

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.drools</groupId>
                <artifactId>drools-bom</artifactId>
                <type>pom</type>
                <version>7.73.0.Final</version>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    
  • 排查不必要的依赖排除

    • drools-core排除mvel2:7.73.0.Final版本的Drools依赖特定版本的MVEL2,强行排除会导致规则编译或执行时缺少必要类,进而引发流关闭等异常,建议移除该排除。
    • drools-decisiontables排除POI相关依赖:决策表组件依赖Apache POI解析Excel格式的规则表,排除后无法加载解析决策表资源,导致流操作异常,建议移除这些排除;若项目中已有POI依赖,可通过BOM统一版本避免冲突。
  • 检查KieContainer初始化代码
    确认初始化KieContainer时,是否存在资源流提前关闭的情况:

    • 加载规则文件(如.drl、.xls)时,确保流对象在KieFileSystem处理完成后再关闭,避免资源被提前释放。
    • 避免重复使用已关闭的流对象加载规则资源。
  • 清理依赖冲突
    执行mvn dependency:tree命令生成依赖树,检查是否存在旧版本的Drools/Kie组件(如7.23.0.Final)被间接依赖引入,或其他与Drools依赖冲突的库,通过排除或统一版本解决冲突。

  • 开启DEBUG日志定位问题
    开启org.drools、org.kie包的DEBUG级日志,查看初始化KieContainer过程中具体是哪个资源流被关闭,定位到具体的规则文件或决策表加载环节,针对性修复资源加载逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 14:48:17