Drools program throwing java.lang.NoClassDefFoundError:org/drools/core/impl/KnowledgeBaseFactoryServiceImpl

Drools program throwing java.lang.NoClassDefFoundError:org/drools/core/impl/KnowledgeBaseFactoryServiceImpl

需要一些帮助运行从 eclipse 中创建一个简单的 POC。 我在 eclipse 中写了一个 java class 和一个规则 (.drl)(使用 drools distribution 7.6.0)。我正在为 运行 规则创建知识库的代码片段:

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

我导入了知识-api-6.5.0.Final.jar。但是没看到

org.drools.core.impl.KnowledgeBaseFactoryServiceImpl

相反,我看到了

org.drools.impl.KnowledgeBaseFactoryServiceImpl

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

如果您使用的是 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。

希望对您有所帮助,