Drools 编译器从 7.8 开始显示规则已定义错误。0.Final

Drools Compiler showing Rule already defined error starting with 7.8.0.Final

从 3.0.6 开始,我们一直使用 Drools 超过 10 年,目前是 7.3。0.Final。

我们有一个 Maven 模块和一个 kmodule,在不同的包中包含大约 300 个不同的 kieSession。

直到 7.7.0.Final 我们的规则模块编译正常,即 "mvn clean package" 生成 Drools jar 没有任何问题。 但是,当我将 POM 中的 Drools 版本升级到 7.8 时。0.Final,我收到许多关于已定义规则的错误。

我们确实有许多包含相同规则名称的规则文件,但它们都在不同的包中,因此在不同的 kieSession 中。直到 7.7。0.Final 这工作正常。

我在 7.8 的发行说明中找不到任何提示。0.Final 描述了为什么没有编译器开始抱怨重复的规则名称。

另外,使用最新版本7.14。0.Final显示同样的错误:

[ERROR] Failed to execute goal org.kie:kie-maven-plugin:7.8.0.Final:build (default-build) on project myproject: Execution default-build of goal org.kie:kie-maven-plugin:7.8.0.Final:build failed: Unable to get KieModule, Errors Existed: Error Messages:
[ERROR] Message [id=1, kieBase=defaultKieBase, level=ERROR, path=mypath/my-rules-file.drl, line=23, column=0
[ERROR]    text=Duplicate rule name: MyRuleName]

此错误消息中看起来奇怪的是 defaultKieBase。

此会话的 kmodule 定义如下所示:

<kbase name="my-rules-base"
           packages="my.package">
    <ksession name="my-rules-session" type="stateless"/>
</kbase>

好的,似乎从 7.8 开始。0.FinalDrools 编译器会考虑 DRL 文件中的包名称,因此您需要确保使用正确的包名称。