Drools 使用kmodule.xml未找到KieBase的DRL文件
我正在使用java和Drools 6.2.0开发一个Maven项目,我试图通过kmodule.xml文件将某个DRL文件“绑定”到一个KieBase,但我不断收到错误Drools 使用kmodule.xml未找到KieBase的DRL文件,drools,Drools,我正在使用java和Drools 6.2.0开发一个Maven项目,我试图通过kmodule.xml文件将某个DRL文件“绑定”到一个KieBase,但我不断收到错误 WARN org.drools.compiler.kie.builder.impl.AbstractKieModule - No files found for KieBase 在运行项目时 我认为我已经以正确的方式配置了所有内容,如(第4.2.2章-概述-构建、部署、利用和运行-构建)所示,但看不出我的错误在哪里 在这个项目中
WARN org.drools.compiler.kie.builder.impl.AbstractKieModule - No files found for KieBase
在运行项目时
我认为我已经以正确的方式配置了所有内容,如(第4.2.2章-概述-构建、部署、利用和运行-构建)所示,但看不出我的错误在哪里
在这个项目中,由于项目体系结构的原因,我认为通过编码来声明/配置Drools不是我的选择,这就是我使用kmodule.xml方法的原因
欢迎提出任何建议
My kmodule.xml(位置:src/main/resources/META-INF): 我的班级出发(仅Drools代码)(位置:src/com/site/myapp/checks): My pom.xml(仅Drools依赖项):
org.drools
流口水
6.2.0.1最终版本
聚甲醛
org.kie
基亚皮
6.2.0.1最终版本
org.drools
drools编译器
6.2.0.1最终版本
运行时
org.drools
命名会话
6.2.0.1最终版本
问题是需要在pom.xml文件中声明以包含DRL文件
pom.xml文件应该是这样的(在我的项目中是这样的,在其他项目中应该是类似的):
...
src
src/main/resources
META-INF/kmodule.xml
com/site/myapp/checks/offering/offering.drl
.
org.drools
流口水
6.2.0.1最终版本
聚甲醛
进口
org.kie
基亚皮
org.drools
drools编译器
运行时
注意问题中所示的与pom.xml相关的更改。在这里,我已经更改了drools bom工件的位置,它现在位于dependecyManagement标记中(该工件用于工件的版本控制,您只需要声明一次工件的版本);并删除了命名的kiesession工件。问题是需要在pom.xml文件中声明以包含DRL文件 pom.xml文件应该是这样的(在我的项目中是这样的,在其他项目中应该是类似的):
...
src
src/main/resources
META-INF/kmodule.xml
com/site/myapp/checks/offering/offering.drl
.
org.drools
流口水
6.2.0.1最终版本
聚甲醛
进口
org.kie
基亚皮
org.drools
drools编译器
运行时
注意问题中所示的与pom.xml相关的更改。在这里,我已经更改了drools bom工件的位置,它现在位于dependecyManagement标记中(该工件用于工件的版本控制,您只需要声明一次工件的版本);并删除了名为kiesession的工件。我没有看到任何明显的问题。但我确实有一些问题:为什么要包括drools bom和命名会话工件?你真的需要它们吗?你的drl文件名是什么?-drools bom工件我不确定,它是由其他人包含的,但我认为它与编译有关。-命名的kiesession工件我在教程中看到过,并尝试过…-我的DRL文件名是exchange.drlI在这里看不到任何明显的问题。但我确实有一些问题:为什么要包括drools bom和命名会话工件?你真的需要它们吗?你的drl文件名是什么?-drools bom工件我不确定,它是由其他人包含的,但我认为它与编译有关。-命名的kiesession工件我在教程中看到过,并尝试过…-我的DRL文件名是exchange.DRL
<?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>
package com.site.myapp.checks.departure
rule "my rule 1"
when
// some conditions
then
// something to do
end
channelName = "departure";
KieServices ks = KieServices.Factory.get();
KieContainer kc = ks.getKieClasspathContainer();
String kSessionName = channelName+"KS";
kSession = kc.newStatelessKieSession(kSessionName);
<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>
<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>