Drools程序抛出java.lang.NoClassDefFoundError:org / drools / core / impl / KnowledgeBaseFactoryServiceImpl

时间:2018-04-15 13:23:54

标签: drools

从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

在罐子里面。我错过了什么吗?

1 个答案:

答案 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。

希望它有所帮助,