从eclipse运行一个简单的POC需要一些帮助。 我在eclipse中编写了一个java类和一个规则(.drl)(使用drools发行版7.6.0).Code片段我正在创建一个知识库来运行规则:
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newClassPathResource("rules/Sample Rule.drl"), ResourceType.DRL);
KnowledgeBuilderErrors errors = kbuilder.getErrors();
if (errors.size() > 0) {
for (KnowledgeBuilderError error : errors) {
System.err.println(error);
}
throw new IllegalArgumentException("Could not parse knowledge.");
}
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
代码没有任何错误。但在运行时,我看到以下异常
Caused by: java.lang.ClassNotFoundException: org.drools.core.impl.KnowledgeBaseFactoryServiceImpl
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 14 more
我导入了Knowledge-api-6.5.0.Final.jar。但是看不到
org.drools.core.impl.KnowledgeBaseFactoryServiceImpl
相反,我看到了
org.drools.impl.KnowledgeBaseFactoryServiceImpl
在罐子里面。我错过了什么吗?
答案 0 :(得分:1)
如果您使用的是Drools 7.6.0,为什么要导入Knowledge-api-6.5.0.Final.jar
?
即使您导入该jar的正确版本,它也只包含API接口,但根本没有实现。在执行代码时,您仍然需要提供实现这些接口的类。
如果您使用的是Maven,则这些是您需要的依赖项:
<dependency>
<groupId>org.kie</groupId>
<artifactId>kie-api</artifactId>
<version>${drools.version}</version>
</dependency>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-compiler</artifactId>
<version>${drools.version}</version>
</dependency>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-core</artifactId>
<version>${drools.version}</version>
</dependency>
对于版本7.7.0-SNAPSHOT,这些依赖项转换为以下jar文件:
kie-api-7.7.0-SNAPSHOT.jar
drools-compiler-7.7.0-SNAPSHOT.jar
drools-core-7.7.0-SNAPSHOT.jar
不使用依赖关系管理系统(如Maven)的问题是您可能仍需要在类路径中添加一些额外的jar。
希望它有所帮助,