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

Kogito+Quarkus项目使用TruthMaintenanceSystem报错求助

解决Kogito+Quarkus中使用insertLogical时的MissingDependencyException问题

问题分析

在基于Kogito与Quarkus构建的Drools项目中,规则使用insertLogical操作触发MissingDependencyException,提示缺少org.drools:drools-tms依赖,但添加该依赖后问题仍存在。核心诱因大概率是版本冲突、TMS未显式启用或Quarkus打包未正确包含依赖类。

解决方案步骤

1. 修正依赖版本,消除版本冲突

你的pom.xml手动指定了drools.version,但Kogito的BOM已统一管理Drools相关依赖版本,手动指定易引发版本不兼容。移除手动设置的drools.version属性,让drools-tms依赖继承BOM中的版本:

修改后的pom.xml关键片段:

<properties>
    <maven.compiler.source>17</maven.compiler.source>
    <maven.compiler.target>17</maven.compiler.target>
    <quarkus-plugin.version>2.16.4.Final</quarkus-plugin.version>
    <quarkus.platform.artifact-id>quarkus-bom</quarkus.platform.artifact-id>
    <quarkus.platform.group-id>io.quarkus</quarkus.platform.group-id>
    <quarkus.platform.version>2.16.4.Final</quarkus.platform.version>
    <kogito.bom.group-id>org.kie.kogito</kogito.bom.group-id>
    <kogito.bom.artifact-id>kogito-bom</kogito.bom.artifact-id>
    <kogito.bom.version>1.36.1.Final</kogito.bom.version>
    <version.org.kie.kogito>1.36.1.Final</version.org.kie.kogito>
    <!-- 移除手动指定的drools.version -->
</properties>

<dependencies>
    <!-- ... 其他依赖 ... -->
    <dependency>
        <groupId>org.drools</groupId>
        <artifactId>drools-tms</artifactId>
        <!-- 不再指定version,由Kogito BOM自动管理 -->
    </dependency>
    <!-- ... 其他依赖 ... -->
</dependencies>

2. 显式启用Truth Maintenance System (TMS)

Kogito默认未启用TMS,需通过配置开启:

在src/main/resources/application.properties中添加:

# 启用规则引擎的真值维护系统
kogito.rules.tms.enabled=true

若通过代码创建KieSession,可手动在配置中设置TMS模式:

import org.drools.core.conf.TMSModeOption;
import org.kie.api.KieBase;
import org.kie.api.runtime.KieSession;
import org.kie.api.runtime.KieSessionConfiguration;
import org.kie.api.KieServices;

// 获取KieBase后创建Session配置
KieSessionConfiguration sessionConfig = KieServices.Factory.get().newKieSessionConfiguration();
sessionConfig.setOption(TMSModeOption.ENABLED);

// 使用配置创建KieSession
KieSession kieSession = kieBase.newKieSession(sessionConfig, null);

3. 确保Quarkus打包包含依赖类

若使用Quarkus原生编译(Native Image),需保证drools-tms的类被正确纳入原生镜像。在src/main/resources/META-INF/native-image/目录创建reflection-config.json文件:

[
  {
    "name": "org.drools.core.common.DefaultTruthMaintenanceSystem",
    "allDeclaredConstructors": true,
    "allPublicConstructors": true,
    "allDeclaredMethods": true,
    "allPublicMethods": true
  }
]

4. 清理缓存并重新构建

执行以下命令清理项目缓存,确保依赖正确加载:

mvn clean install -DskipTests

验证

重新启动项目,触发包含insertLogical的规则,确认MissingDependencyException不再抛出,且TMS功能正常(规则条件不满足时,逻辑插入的对象会被自动移除)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 11:03:20