我们从3.0.6开始一直使用Drools,至今已有7.3.0.Final。
我们有一个Maven模块,其中的kmodule包含不同包中的大约300个不同的kieSessions。
直到7.7.0.Final,我们的rules模块可以正常编译,即,“ mvn clean package”可以生成Drools jar,而不会出现任何问题。 但是,当我将POM中的Drools版本升级到7.8.0.Final时,会收到许多有关已定义规则的错误。
我们确实有很多包含相同规则名称的规则文件,但是它们都位于不同的程序包中,因此位于不同的kieSessions中。直到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>
答案 0 :(得分:1)
好吧,看来是从7.8.0.Final开始,Drools编译器确实考虑了DRL文件中的软件包名称,因此您需要确保使用正确的软件包名称。