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
相关产品推荐
相关产品推荐

