Gradle集成Drools打包Jar运行报错求助
问题
Gradle项目集成Drools组件后本地运行正常,但打包成Jar包运行时出现错误。使用的依赖版本如下:
compile group: 'org.kie', name: 'kie-spring', version: '7.17.0.Final' compile group: 'org.drools', name: 'drools-core', version: '7.17.0.Final' compile group: 'org.kie', name: 'kie-ci', version: '7.17.0.Final'
核心错误日志:
[Byte Buddy] ERROR org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping$__sisu4 [ClassRealm[maven, parent: ClassRealm[maven-parent, parent: null]], null, loaded=false] java.lang.IllegalStateException: Cannot resolve type description for org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping ... at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildPomModel(KieBuilderImpl.java:509) at org.kie.internal.utils.KieHelper.getKieContainer(KieHelper.java:84) at com.ddmc.tag.drools.DroolsUtils.getKnowledgeBaseImplBySql(DroolsUtils.java:537)
解决方案
1. 移除冗余的kie-ci依赖
kie-ci主要用于Maven环境下通过POM构建Kie容器,纯Gradle/Spring Boot项目通常不需要该依赖。调整依赖为:
implementation group: 'org.kie', name: 'kie-spring', version: '7.17.0.Final' implementation group: 'org.drools', name: 'drools-core', version: '7.17.0.Final' implementation group: 'org.drools', name: 'drools-compiler', version: '7.17.0.Final' implementation group: 'org.kie', name: 'kie-api', version: '7.17.0.Final'
2. 修改规则加载逻辑,避免Maven POM解析
如果必须保留kie-ci,需调整KieHelper的使用方式,直接加载规则文件而非依赖POM模型:
KieHelper kieHelper = new KieHelper(); // 直接添加DRL规则内容 kieHelper.addContent("package com.ddmc.rules;\nrule \"SampleRule\" when then end", ResourceType.DRL); // 或从类路径加载规则文件 kieHelper.addResource(ResourceFactory.newClassPathResource("rules/sample.drl"), ResourceType.DRL); KieContainer kieContainer = kieHelper.build();
3. 排除kie-ci中的Maven依赖冲突
若无法移除kie-ci,排除其中的Maven相关组件以避免类加载冲突:
implementation group: 'org.kie', name: 'kie-ci', version: '7.17.0.Final' { exclude group: 'org.apache.maven' exclude group: 'org.codehaus.plexus' }
4. 修正Spring Boot打包配置
确保Gradle的Spring Boot打包插件正确打包所有依赖:
plugins { id 'org.springframework.boot' version '2.3.12.RELEASE' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' } springBoot { mainClassName = 'com.ddmc.TagServiceApplication' } bootJar { archiveFileName = 'tag-service.jar' }
5. 统一Byte Buddy版本
解决Byte Buddy版本冲突问题,在依赖管理中指定统一版本:
dependencyManagement { dependencies { dependency 'net.bytebuddy:byte-buddy:1.10.22' dependency 'net.bytebuddy:byte-buddy-agent:1.10.22' } }
内容的提问来源于stack exchange,提问作者沈月望
相关产品推荐
相关产品推荐

