Drools 将另一个项目的规则添加到 kmodule 中?
Drools add rules from another project into kmodule?
因此文档说明您可以使用
以编程方式加载 kie 模块
KieServices ks = KieServices.Factory.get();
KieContainer kieContainer = newKieContainer(ks.newReleaseId("my.org","my.artifact.id","version"));
KieSession kieSession = kieContainer.newKieSession("ktest");
有没有办法通过 maven
和 kmodule.xml
做到这一点?
我的用例是使用我在这个项目中编写的规则,在另一个项目中添加到它们上。也许我在 7.7 文档中遗漏了它,如果是这样,请 link 我会与我的眼科医生预约。
附录:
我想象 kmodule.xml
看起来类似于:
<kmodule xmlns="http://jboss.org/kie/6.0.0/kmodule">
<configuration>
</configuration>
<!-- Shared Knowledgebase -->
<kbase name="am" packages="my.package.name, rules">
<ksession name="default" type="stateful" default="true"/>
</kbase>
不过那个好像没有看到包
谢谢
是的,您可以在另一个项目中使用不同的 Drools 项目。按照以下步骤操作:
- 构建要在其他 Drool 项目中使用的 Drool 项目。在正确构建之前检查
kmodule.xml
文件。
- 构建项目后,使用
mvn file upload
命令将 jar 上传到 local maven repository
,即 .m2 repository
。示例 - mvn install:install-file -Dfile="pathToJAr" -DgroupId="groupId" -DartifactId="artifactId" -Dversion="version" -Dpackaging="jar"
。您可以使用自定义的 groupId、artifactId 和版本。
- 然后在
pom.xml
中添加上面自定义的groupId,artifactId和version作为依赖
然后创建 kieConatiner
和 kieSession,如下所示:
KieServices.Factory.get();
ReleaseId rs= ks.newReleaseId("artifactId","groupId","version");
KieContainer kieContainer = ks.newKieContainer(rs);
KieScanner kieScanner = ks.newKieScanner(kieContainer);
kieScanner.start(10000);
KieScanner 用于动态更新KieContainer
。这里 kieScanner
将每 10 秒扫描一次本地 maven 仓库。
所以我确实弄明白了。我认为它与 kmodule.xml
中的 package
有关。但实际上它只是简单地添加 incluldes = "package.name"
并且它自己解决了所有问题。
不过,我也推荐 @Prog_G 回答,虽然这不是我要找的,但我相信它会帮助其他人解决同样的问题。
最终结果:
<kmodule xmlns="http://jboss.org/kie/6.0.0/kmodule">
<configuration>
</configuration>
<kbase name="am" packages="rules" includes = "my.package.name">
<ksession name="default" type="stateful" default="true"/>
</kbase>
因此文档说明您可以使用
以编程方式加载 kie 模块KieServices ks = KieServices.Factory.get();
KieContainer kieContainer = newKieContainer(ks.newReleaseId("my.org","my.artifact.id","version"));
KieSession kieSession = kieContainer.newKieSession("ktest");
有没有办法通过 maven
和 kmodule.xml
做到这一点?
我的用例是使用我在这个项目中编写的规则,在另一个项目中添加到它们上。也许我在 7.7 文档中遗漏了它,如果是这样,请 link 我会与我的眼科医生预约。
附录:
我想象 kmodule.xml
看起来类似于:
<kmodule xmlns="http://jboss.org/kie/6.0.0/kmodule">
<configuration>
</configuration>
<!-- Shared Knowledgebase -->
<kbase name="am" packages="my.package.name, rules">
<ksession name="default" type="stateful" default="true"/>
</kbase>
不过那个好像没有看到包
谢谢
是的,您可以在另一个项目中使用不同的 Drools 项目。按照以下步骤操作:
- 构建要在其他 Drool 项目中使用的 Drool 项目。在正确构建之前检查
kmodule.xml
文件。 - 构建项目后,使用
mvn file upload
命令将 jar 上传到local maven repository
,即.m2 repository
。示例 -mvn install:install-file -Dfile="pathToJAr" -DgroupId="groupId" -DartifactId="artifactId" -Dversion="version" -Dpackaging="jar"
。您可以使用自定义的 groupId、artifactId 和版本。 - 然后在
pom.xml
中添加上面自定义的groupId,artifactId和version作为依赖 然后创建
kieConatiner
和 kieSession,如下所示:KieServices.Factory.get(); ReleaseId rs= ks.newReleaseId("artifactId","groupId","version"); KieContainer kieContainer = ks.newKieContainer(rs); KieScanner kieScanner = ks.newKieScanner(kieContainer); kieScanner.start(10000);
KieScanner 用于动态更新KieContainer
。这里 kieScanner
将每 10 秒扫描一次本地 maven 仓库。
所以我确实弄明白了。我认为它与 kmodule.xml
中的 package
有关。但实际上它只是简单地添加 incluldes = "package.name"
并且它自己解决了所有问题。
不过,我也推荐 @Prog_G 回答,虽然这不是我要找的,但我相信它会帮助其他人解决同样的问题。
最终结果:
<kmodule xmlns="http://jboss.org/kie/6.0.0/kmodule">
<configuration>
</configuration>
<kbase name="am" packages="rules" includes = "my.package.name">
<ksession name="default" type="stateful" default="true"/>
</kbase>