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");

有没有办法通过 mavenkmodule.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 项目。按照以下步骤操作:

  1. 构建要在其他 Drool 项目中使用的 Drool 项目。在正确构建之前检查 kmodule.xml 文件。
  2. 构建项目后,使用 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 和版本。
  3. 然后在pom.xml中添加上面自定义的groupId,artifactId和version作为依赖
  4. 然后创建 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>