代码之家  ›  专栏  ›  技术社区  ›  SANTHOSH_L

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

  •  0
  • SANTHOSH_L  · 技术社区  · 6 年前

    需要从eclipse运行简单POC的帮助。 我在eclipse中编写了一个java类和一个规则(.drl)(使用drools 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
    

    我已经导入了Knowledge-api-6.5.0。最终的罐子但看不到

    组织。流口水。果心实施。KnowledgeBaseFactoryServiceImpl

    相反,我明白了

    组织。流口水。实施。KnowledgeBaseFactoryServiceImpl

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

    1 回复  |  直到 6 年前
        1
  •  1
  •   Esteban Aliverti    6 年前

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

    希望有帮助,