使用 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 工件。
我正在使用 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 工件。