jBPM运行BPMN示例JUnit测试报KieAssemblers同优先级冲突错误
问题根因
报错核心触发点是KIE SPI服务加载时检测到同优先级的KieAssemblers实现重复注册,本质是依赖配置错误导致的类路径冲突:
- 你手动在pom中单独声明了
jbpm-runtime-manager、kie-internal、hibernate-core依赖,而jbpm-test已经通过传递依赖引入了整套版本匹配的jBPM/KIE核心包,手动重复声明导致同一套SPI配置文件被类路径多次扫描加载,触发注册冲突。 - 升级jBPM版本到7.71.0.Final时,没有用官方BOM统一管理关联依赖版本,手动指定的hibernate版本和jBPM 7.71.0依赖的版本不匹配,进一步加剧了依赖树混乱。清理Maven本地缓存只能解决jar包损坏的问题,解决不了类路径重复加载的问题,所以操作无效。
修复步骤
- 替换现有pom.xml内容,通过jBPM官方BOM统一管理所有关联依赖版本,删除所有手动声明的冗余jBPM/KIE/hibernate依赖,修改后的pom如下:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>msc</groupId> <artifactId>test</artifactId> <version>0.0.1-SNAPSHOT</version> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.5.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> <!-- 统一锁定所有jBPM/KIE关联依赖版本,彻底避免版本不一致、重复引入问题 --> <dependencyManagement> <dependencies> <dependency> <groupId>org.jbpm</groupId> <artifactId>jbpm-bom</artifactId> <version>7.71.0.Final</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.jbpm</groupId> <artifactId>jbpm-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope> </dependency> </dependencies> </project>
- 在Eclipse中右键项目,选择Maven -> Update Project,勾选Force Update of Snapshots/Releases选项,强制刷新项目依赖,清除旧的冗余依赖引用。
- 不要手动指定hibernate或其他jBPM关联组件的版本,BOM已经默认导入了和7.71.0.Final完全兼容的版本,手动改版本大概率会触发新的类冲突。
- 如果刷新后Eclipse运行仍报错,先在项目根目录执行
mvn clean test命令行构建,确认命令行层面测试可以正常通过,再通过Eclipse JUnit插件运行测试类,排除Eclipse自身缓存的影响。
验证结果
依赖刷新完成后重新运行ProcessTest.java,SPI重复注册的报错会直接消失,Hello World流程正常启动执行,测试用例可以顺利通过,控制台会输出流程节点Hello的触发日志。
内容的提问来源于stack exchange,提问作者Lucie
相关产品推荐
相关产品推荐

