添加kie-server-client依赖后JBPM项目构建长时间无法完成问题咨询
解决方案
根因分析
- 你添加
kie-server-client依赖时的排除规则存在语法错误,groupId中的-是拼写错误,应该为.,导致原本要排除的规则/PMML相关依赖没有被成功过滤 - 残留的PMML传递依赖会让Kie构建器默认尝试初始化多个PMML专用KieBase,扫描不到对应规则文件时会陷入长时间的重试/编译等待,是构建卡死的核心原因
- 手动终止构建后出现的Maven注入、Weld上下文错误都是构建被强制中断后的衍生问题,不是根因
修复步骤
步骤1:修正依赖排除规则,新增PMML相关依赖排除
修正后的依赖配置如下,重点修正groupId的拼写错误,新增PMML相关依赖的通配符排除:
<dependency> <groupId>org.kie.server</groupId> <artifactId>kie-server-client</artifactId> <exclusions> <!-- 修正原groupId的拼写错误:把横杠替换为点 --> <exclusion> <groupId>org.kie</groupId> <artifactId>kie-dmn-api</artifactId> </exclusion> <exclusion> <groupId>org.optaplanner</groupId> <artifactId>optaplanner-core</artifactId> </exclusion> <exclusion> <groupId>org.drools</groupId> <artifactId>drools-core</artifactId> </exclusion> <!-- 新增所有PMML相关依赖排除,避免触发PMML KieBase自动扫描 --> <exclusion> <groupId>org.kie</groupId> <artifactId>kie-pmml*</artifactId> </exclusion> <exclusion> <groupId>org.drools</groupId> <artifactId>drools-pmml*</artifactId> </exclusion> </exclusions> <!-- 建议显式指定和你当前JBPM版本匹配的版本号,避免版本不兼容问题 --> <version>${version.org.kie}</version> </dependency>
注意:如果你的项目中实际用到了Drools规则能力,不要排除drools-core,仅保留PMML相关的排除规则即可
步骤2:显式配置kmodule.xml禁用不需要的KieBase
在项目src/main/resources/META-INF/kmodule.xml中添加配置,明确指定你实际需要用到的KieBase,关闭PMML相关自动扫描:
<kmodule xmlns="http://www.drools.org/xsd/kmodule"> <!-- 仅配置你实际用到的KieBase,不需要规则的话可以只保留默认空配置,packages指定为你实际的业务包路径 --> <kbase name="defaultKieBase" packages="com.your.business.package"> <ksession name="defaultKieSession"/> </kbase> <!-- 显式声明日志中出现的所有PMML相关KieBase,设置packages为none、default为false,避免自动加载 --> <kbase name="KiePMML-Cluster-Rules" packages="none" default="false"/> <kbase name="KiePMML-Tree-Rules" packages="none" default="false"/> <kbase name="KiePMML-Bayes-Rules" packages="none" default="false"/> <kbase name="KiePMML-Neural-Rules" packages="none" default="false"/> <kbase name="KiePMML-Regression-Rules" packages="none" default="false"/> <kbase name="KiePMML-SVM-Rules" packages="none" default="false"/> <kbase name="KiePMML-Scorecard-Rules" packages="none" default="false"/> </kmodule>
步骤3:清理缓存后重试构建
- 清空Business Central的项目构建缓存,删除本地Maven仓库中
org/kie、org/drools相关的缓存目录 - 重启Business Central服务后重新执行构建
可选优化
如果你的WorkItemHandler仅需要调用Kie Server的REST接口,不需要内置规则、流程解析能力,可以直接使用更轻量的kie-server-rest-client替代完整的kie-server-client,大幅减少不必要的传递依赖。
内容的提问来源于stack exchange,提问作者Dr Dave
相关产品推荐
相关产品推荐

