Drools 7.7.0.Final generateModel执行失败:仅含行列信息无文件信息
解决Drools 7.7.0.Final生成Model到KJAR时无文件信息的报错问题
我太懂这种烦恼了——用-DgenerateModel=WITHDRL构建KJAR时,插件只抛出行列号却不说哪个文件出问题,面对一堆规则文件完全无从下手。下面是我整理的几个排查和解决思路,亲测有效:
1. 挖深Maven Debug日志的细节
你已经加了-X开启debug模式,但别只盯着最终的报错行。往前翻日志,尤其是从[INFO] --- kie-maven-plugin:7.7.0.Final:generateModel (default-generateModel)开始的片段:
- 插件在处理每个DRL文件时通常会输出类似
Processing file: xxx.drl的日志,你可以对应报错的行列号,找到最近处理的那个文件,大概率就是它出问题了 - 重点看
Caused by开头的异常栈,深层异常往往会藏着文件名和具体语法错误
2. 二分法排查问题文件
既然项目里有大量独立规则文件,最快定位的方式就是二分排除:
- 先临时移走一半规则文件,重新执行构建。如果报错消失,说明问题在移走的那批里;如果还报错,就继续在剩下的文件里二分
- 或者反过来:先只留少数几个确定没问题的规则文件,确认构建能跑通,再逐个添加回去,直到触发报错,这样就能精准定位到问题文件
3. 检查DRL文件的常见语法坑
WITHDRL模式会解析DRL生成模型,很多时候报错是因为某个规则文件有语法瑕疵,而插件的报错信息没关联文件名。重点检查这些点:
- 规则定义是否完整:有没有漏写
end关键字(比如rule "xxx"后面没闭合) - 类型/变量引用是否合法:有没有引用不存在的Java类、属性,或者拼写错误
- 注释格式是否正确:多行注释
/* ... */有没有闭合,单行注释//有没有干扰到代码逻辑 - 有没有用了7.7.0.Final不支持的特性:这个版本不算太新,有些后续版本的语法糖(比如某些DSL扩展)可能还没支持
4. 增强插件的日志输出
可以在pom.xml里给kie-maven-plugin加配置,强制输出更详细的日志:
<plugin> <groupId>org.kie</groupId> <artifactId>kie-maven-plugin</artifactId> <version>7.7.0.Final</version> <executions> <execution> <goals> <goal>generateModel</goal> </goals> <configuration> <generateModel>WITHDRL</generateModel> <verbose>true</verbose> <debug>true</debug> </configuration> </execution> </executions> </plugin>
重新构建后,插件会输出每个文件的处理细节,很容易找到对应行列号的问题文件。
5. 单独验证可疑DRL文件
如果已经锁定了几个可疑文件,可以用Drools的API单独验证:写个简单的Java测试类,加载单个DRL文件,调用KieContainer编译,这样抛出的异常会明确告诉你哪个文件哪里错了,比Maven插件的模糊报错清晰多了。
内容的提问来源于stack exchange,提问作者phivo
相关产品推荐
相关产品推荐

