从Java 8迁移到Java 11后Drools规则编译报错原因咨询
报错根本原因
该错误是依赖版本与Java 11不兼容导致的,你当前使用的两款核心依赖均为远超生命周期的老版本,不支持Java 11的类文件格式:
jboss-rules.drools-compiler-4.0.7.jar发布于2008年,内置的规则编译器最高仅支持Java 8的类文件格式,完全不识别Java 11新增的类格式规范jboss-rules.core-compiler-3.2.3.v_686_R32x.jar对应Eclipse 3.2版本的JDT编译器组件,最高仅兼容Java 5的语法和类格式,连Java 8的部分新特性都无法正常解析,更不支持Java 11
触发逻辑
你将应用升级到Java 11后,业务代码、规则依赖的实体类都会被编译为Java 11版本的class文件,WildFly 16默认的编译目标版本也为Java 11。Drools编译规则时需要读取这些类文件做校验,内置的老版本JDT编译器无法识别新格式的类文件,就会抛出wrong class format、ClassFileReader空指针类的错误。
解决方案
可任选以下一种方案解决:
- 回退JDK版本到Java 8,所有依赖与运行环境版本适配,无需修改其他组件
- 升级Drools到7.24及以上版本,同步升级配套的JDT编译器依赖,该版本开始正式支持Java 11的运行和规则编译
内容的提问来源于stack exchange,提问作者Valsaraj Viswanathan
相关产品推荐
相关产品推荐

