【问题标题】:No DRL files found for the KieBase, using kmodule.xml使用 kmodule.xml 找不到 KieBase 的 DRL 文件
【发布时间】:2015-07-15 17:07:47
【问题描述】:

我正在使用 java 和 Drools 6.2.0 开发一个 Maven 项目,我正在尝试通过 kmodule.xml 文件将某个 DRL 文件“绑定”到 KieBase,但我不断收到错误

WARN org.drools.compiler.kie.builder.impl.AbstractKieModule - No files found for KieBase

在运行项目时。

我认为我已经以正确的方式配置了所有内容,如documentation 所示(第 4.2.2 章 - 概述 - 构建、部署、利用和运行 - 构建),但看不出我的错误在哪里。

在这个项目中,我认为我不能通过编码来声明/配置 Drools,由于项目架构,这就是我使用 kmodule.xml 方法的原因。

欢迎提出任何建议。


我的 kmodule.xml(位置:src/main/resources/META-INF):

<?xml version="1.0" encoding="UTF-8"?>
<kmodule xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://jboss.org/kie/6.0.0/kmodule">
    <kbase name="departureKB" packages="com.site.myapp.checks.departure">
        <ksession name="departureKS" type="stateless" />
    </kbase>
</kmodule>

我的 DRL 文件(虚拟)(位置:src/main/resources/com/site/myapp/checks/departure):

package com.site.myapp.checks.departure

rule "my rule 1"
    when
        // some conditions
    then
        // something to do
end

我的班级出发(只有 Drools 代码)(位置:src/com/site/myapp/checks):

channelName = "departure";
KieServices ks = KieServices.Factory.get();
KieContainer kc = ks.getKieClasspathContainer();
String kSessionName = channelName+"KS";
kSession = kc.newStatelessKieSession(kSessionName);

我的 pom.xml(仅 Drools 依赖项):

<dependency>
    <groupId>org.drools</groupId>
    <artifactId>drools-bom</artifactId>
    <version>6.2.0.Final</version>
    <type>pom</type>
</dependency>
<dependency>
    <groupId>org.kie</groupId>
    <artifactId>kie-api</artifactId>
    <version>6.2.0.Final</version>
</dependency>
<dependency>
    <groupId>org.drools</groupId>
    <artifactId>drools-compiler</artifactId>
    <version>6.2.0.Final</version>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>org.drools</groupId>
    <artifactId>named-kiesession</artifactId>
    <version>6.2.0.Final</version>
</dependency>

【问题讨论】:

  • 我没有看到任何明显的问题。不过,我确实有一些问题:为什么要包含 drools-bom 和 named-kiesession 工件?你真的需要它们吗?你的 drl 文件的名称是什么?
  • - drools-bom 神器我不确定,它被其他人包含,但我认为它与编译有关。 - named-kiesession 工件,我在教程中看到过,并尝试过... - 我的 DRL 文件名为 Departure.drl

标签: drools


【解决方案1】:

问题是需要在 pom.xml 文件中声明以包含 DRL 文件。

pom.xml 文件应该是这样的(在我的项目中是这样的,在其他项目中应该是这样的):

<project ...>
   ...
    <build>
        <sourceDirectory>src</sourceDirectory>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>META-INF/kmodule.xml</include>
                    <include>com/site/myapp/checks/departure/Departure.drl</include>
                </includes>
                <targetPath>.</targetPath>
            </resource>
        </resources>
    </build>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.drools</groupId>
                <artifactId>drools-bom</artifactId>
                <version>6.2.0.Final</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.kie</groupId>
            <artifactId>kie-api</artifactId>
        </dependency>
        <dependency>
            <groupId>org.drools</groupId>
            <artifactId>drools-compiler</artifactId>
            <scope>runtime</scope>
        </dependency>
    </dependencies>
</project>

注意问题中与 pom.xml 相关的更改。
在这里,我更改了 drools-bom 工件的位置,现在它位于 dependecyManagement 标记中(此工件用于版本工件的控制,您只需声明工件的版本一次);并删除了 named-kiesession 工件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 2018-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多