Search code examples
drools

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


We have been using Drools for more than 10 years starting with 3.0.6 and currently at 7.3.0.Final.

We have one Maven module with a kmodule containing about 300 different kieSessions in different packages.

Up until 7.7.0.Final our rules module compiles fine, i.e. a "mvn clean package" generates the Drools jar without any issues. When I upgrade the Drools version in the POM to 7.8.0.Final however, I receive many errors about Rules being already defined.

We do have many rules files containing the same rules names but they are all in different packages and thus in different kieSessions. And until 7.7.0.Final this worked fine.

I could't find any hint in the release notes for 7.8.0.Final that describes why no the compiler is starting to complain about duplicate Rule names.

Also, using the latest version 7.14.0.Final shows the same errors:

[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]

What looks strange in this error message is the defaultKieBase.

The kmodule definition for this session looks like this:

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

Solution

  • OK, it seems that starting with 7.8.0.Final the Drools compiler does consider the package name inside the DRL Files so you need to make sure that you use correct package names.