Drools从6.5.0.CR2升级到7.7.0.Final时KieSession.startProcess抛异常
这个UnsupportedOperationException的核心原因很明确:你的KieSession没有加载流程引擎的运行时实现,调用startProcess时只能返回一个占位的DummyInternalProcessRuntime,自然会抛出不支持的操作异常。
在Drools 7.x版本中,规则引擎和流程引擎(jBPM)的模块做了明确拆分——Drools 6.x里流程相关功能是包含在核心包中的,但7.x开始需要单独引入jBPM的依赖才能使用流程启动、管理等功能。你当前的Maven依赖只包含了规则引擎的核心组件(kie-api、drools-compiler),完全缺失了流程运行所需的模块。
1. 添加jBPM核心依赖到Maven项目
修改你的pom.xml,在<dependencies>节点中添加以下依赖:
<dependency> <groupId>org.jbpm</groupId> <artifactId>jbpm-flow</artifactId> </dependency> <dependency> <groupId>org.jbpm</groupId> <artifactId>jbpm-flow-builder</artifactId> </dependency>
这两个依赖会引入流程定义解析、运行时执行的核心组件,确保KieSession能够初始化真正的流程运行时环境,而不是返回Dummy实现。
如果你的业务还涉及流程持久化、任务管理等功能,可以根据需求额外添加:
<!-- 流程持久化(如果需要) --> <dependency> <groupId>org.jbpm</groupId> <artifactId>jbpm-persistence-jpa</artifactId> </dependency> <!-- 任务管理(如果需要) --> <dependency> <groupId>org.jbpm</groupId> <artifactId>jbpm-human-task-core</artifactId> </dependency>
2. 验证依赖是否生效
添加依赖后,执行mvn dependency:tree查看依赖树,确认jbpm-flow、jbpm-flow-builder以及它们的传递依赖(比如jbpm-core、kie-internal的相关扩展)都已被正确拉取。
3. 无需修改现有代码逻辑
你当前的KieHelper创建KieSession的逻辑是正确的,只要依赖齐全,this.base.newKieSession()会自动初始化包含流程支持的KieSession,调用startProcess就不会再抛出异常了。
你之前用Ant时手动添加了Drools分发包的所有Jar,其中包含了jBPM相关的组件(比如drools-beliefs、jbpm-*系列Jar),所以流程功能正常。但切换到Maven后只引入了规则引擎的核心依赖,才导致流程功能缺失——这也是模块化拆分后容易踩的坑,一定要根据实际功能需求引入对应依赖,不要盲目全量引入。
内容的提问来源于stack exchange,提问作者Hangman4358

