Drools决策表云端部署失败:MavenEmbedder创建异常求助
解决Drools决策表云端部署MavenEmbedder创建失败问题
看起来你遇到的核心问题是云端虚拟机中KieBuilder构建时无法创建MavenEmbedder,错误根源是No implementation for org.apache.maven.execution.scope.internal.MojoExecutionScope was bound,这通常是Maven依赖冲突、版本不兼容或者云端环境配置问题导致的。下面是几个针对性的解决方案:
1. 移除不必要的kie-ci依赖
从你的代码来看,你只是加载本地类路径下的Excel决策表,并没有用到kie-ci提供的远程Maven仓库Kie容器功能。kie-ci会引入大量Maven核心依赖,很容易引发版本冲突。尝试移除kie-ci依赖,看看是否能正常构建:
<!-- 移除这个依赖 --> <!-- <dependency> <groupId>org.kie</groupId> <artifactId>kie-ci</artifactId> <version>${drools.version}</version> ... </dependency> -->
2. 排除kie-ci中的冲突Maven依赖(如果必须保留kie-ci)
如果你确实需要kie-ci,可以尝试排除它引入的Maven核心依赖,避免和系统或项目中的Maven版本冲突:
<dependency> <groupId>org.kie</groupId> <artifactId>kie-ci</artifactId> <version>${drools.version}</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </exclusion> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> </exclusion> <!-- 排除冲突的Maven组件 --> <exclusion> <groupId>org.apache.maven</groupId> <artifactId>maven-core</artifactId> </exclusion> <exclusion> <groupId>org.apache.maven</groupId> <artifactId>maven-compat</artifactId> </exclusion> <exclusion> <groupId>org.eclipse.sisu</groupId> <artifactId>org.eclipse.sisu.plexus</artifactId> </exclusion> </exclusions> </dependency>
3. 检查云端虚拟机的Maven环境配置
- 确认云端虚拟机安装的Maven版本和你的开发机器一致,Drools对Maven版本有兼容性要求(比如Drools 7.x通常兼容Maven 3.5+)。
- 检查
MAVEN_HOME环境变量是否正确设置,settings.xml配置是否正常(比如镜像、本地仓库路径)。 - 尝试在云端执行
mvn -v确认Maven运行正常,并且本地仓库依赖已正确下载。
4. 修改KieBuilder构建方式,避免解析Pom模型
你的代码不需要依赖Pom模型来构建,所以可以强制KieBuilder跳过Pom解析,改用离线构建模式:
KieServices kieServices = KieServices.Factory.get(); KieFileSystem kieFileSystem = kieServices.newKieFileSystem(); Resource resource = kieServices.getResources().newClassPathResource("dtables/applylncc.xlsx"); kieFileSystem.write(resource); // 改用离线构建,跳过Pom解析 KieBuilder kbuilder = kieServices.newKieBuilder(kieFileSystem); // 只构建规则,不处理Maven依赖 kbuilder.buildAll(KieBuilder.BuildType.NONE); // 手动创建KieModule KieModule kieModule = kbuilder.getKieModule(); KieRepository kieRepository = kieServices.getRepository(); kieRepository.addKieModule(kieModule); KieContainer kContainer = kieServices.newKieContainer(kieModule.getReleaseId()); applySession = kContainer.newKieSession();
5. 确认Drools版本的一致性
确保所有Kie/Drools依赖的${drools.version}完全一致,混合不同版本的依赖也会导致类加载冲突。
内容的提问来源于stack exchange,提问作者oldDave
相关产品推荐
相关产品推荐

