Drools7.59.0运行报KieServices$Factory类未找到依赖问题解决
Drools入门测试项目运行NoClassDefFoundError报错解决方案
运行项目时抛出如下异常:
Exception in thread "main" java.lang.NoClassDefFoundError: org/kie/api/KieServices$Factory at com.sample.App.main(App.java:12)
执行mvn clean install可正常构建成功,尝试现有公开解决方案均无效。
原始项目配置
com.sample.App类代码
package com.sample; import com.model.Item; import org.kie.api.KieServices; import org.kie.api.runtime.KieContainer; import org.kie.api.runtime.KieSession; public class App { public static void main(String[] args) { System.out.println("Rule engine"); KieServices ks = KieServices.Factory.get(); KieContainer kContainer = ks.getKieClasspathContainer(); KieSession kSession = kContainer.newKieSession(); Item item = new Item("A", (float) 123.35); System.out.println("Item category: " + item.getCategory()); kSession.insert(item); int fired = kSession.fireAllRules(); System.out.println("Number of Rules executed: " + fired); System.out.println("Item Category: " + item.getCategory()); } }
com.model.Item类代码
package com.model; public class Item { private String category; private Float cost; public Item(String category, Float cost) { this.category = category; this.cost = cost; } public String getCategory() { return category; } public void setCategory(String category) { this.category = category; } public Float getCost() { return cost; } public void setCost(Float cost) { this.cost = cost; } }
原始pom.xml配置
<?xml version="1.0" encoding="UTF-8"?> <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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>DroolCmonDude2</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>org.kie</groupId> <artifactId>kie-api</artifactId> <version>7.59.0.Final</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.drools</groupId> <artifactId>drools-core</artifactId> <version>7.59.0.Final</version> </dependency> <dependency> <groupId>org.drools</groupId> <artifactId>drools-compiler</artifactId> <version>7.59.0.Final</version> </dependency> <dependency> <groupId>org.drools</groupId> <artifactId>drools-decisiontables</artifactId> <version>7.59.0.Final</version> </dependency> </dependencies> </project>
resources/rules目录下Rules.drl规则文件
package resources.rules; import com.model.Item; rule "Classify Item - Low Range" when $i: Item(cost < 200) then $i.setCategory(Category.LOW_RANGE); end
kmodule.xml配置
<kmodule xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://jboss.org/kie/6.0.0/kmodule"> </kmodule>
修复方案
针对7及以上版本的Drools,需补充drools-mvel、drools-model-compiler和slf4j系列依赖,同时移除原始配置中kie-api的provided scope声明(无需单独声明kie-api,可通过其他Drools组件传递引入),调整后的完整pom.xml配置如下:
<?xml version="1.0" encoding="UTF-8"?> <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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>DroolsAnotherChance</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>org.drools</groupId> <artifactId>drools-core</artifactId> <version>7.59.0.Final</version> </dependency> <dependency> <groupId>org.drools</groupId> <artifactId>drools-compiler</artifactId> <version>7.59.0.Final</version> </dependency> <dependency> <groupId>org.drools</groupId> <artifactId>drools-decisiontables</artifactId> <version>7.59.0.Final</version> </dependency> <dependency> <groupId>org.drools</groupId> <artifactId>drools-mvel</artifactId> <version>7.59.0.Final</version> </dependency> <dependency> <groupId>org.drools</groupId> <artifactId>drools-model-compiler</artifactId> <version>7.59.0.Final</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.25</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-nop</artifactId> <version>1.7.25</version> </dependency> </dependencies> </project>
内容的提问来源于stack exchange,提问作者eehmull
相关产品推荐
相关产品推荐

