使用 kmodule.xml 找不到 KieBase 的 DRL 文件

No DRL files found for the KieBase, using kmodule.xml

我正在使用 java 和 Drools 6.2.0 开发一个 Maven 项目,我正在尝试通过 kmodule.xml 文件将某个 DRL 文件 "bind" 到 KieBase ,但我一直收到错误

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

当运行项目时。

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

在这个项目中,由于项目架构的原因,我认为通过编码 declare/configure 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

我的class出发地(只有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>

问题是需要在 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 tag(该artifact用于artifacts的版本控制,只需要声明一次artifacts的版本);并移除了 named-kiesession 工件。