java.lang.RuntimeException: wrong class format at
在使用Drools规则引擎时由于版本或JDK的原因,往往会出现类似以下异常:
java.lang.RuntimeException: wrong class format at org.drools.compiler.commons.jci.compilers.EclipseJavaCompiler$2.findType(EclipseJavaCompiler.java:289)
或以下异常:
java.lang.RuntimeException: wrong class format Caused by: org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException: null
其实这类异常,大多数情况下都是版本问题导致的。
场景一
基于SpringBoot项目,Drools5.6,Java8,Eclipse4.2版本。由于Eclipse不支持Java8编译Drools5,会抛出wrong class format相关异常。
解决方案,项目添加如下依赖:
<dependency> <groupId>org.eclipse.jdt.core.compiler</groupId> <artifactId>ecj</artifactId> <version>4.5.1</version> </dependency>
重启项目,报错接触。
场景二
异常信息如下:
2016-08-23 15:18:54,955: ERROR [RulesListener] - wrong class format java.lang.RuntimeException: wrong class format at org.drools.compiler.commons.jci.compilers.EclipseJavaCompiler$2.findType(EclipseJavaCompiler.java:279) at org.drools.compiler.commons.jci.compilers.EclipseJavaCompiler$2.findType(EclipseJavaCompiler.java:219)
同样是Drools和JDK8版本直接的问题。每个示例中安装相同的JDK8(jdk1.8.0_77)即可解决。相关issues地址:https://issues.redhat.com/browse/DROOLS-329
也可以降低JDK版本到1.7或以下,总之,JDK8相关的bug,换一个不会抛异常的即可。
场景三
基于wildfly15部署Drools5.1.1,当使用JDK11时,会报类似如下异常:
Caused by: java.lang.RuntimeException: wrong class format at test.ear//org.drools.commons.jci.compilers.EclipseJavaCompiler$2.findType(EclipseJavaCompiler.java:260) at test.ear//org.drools.commons.jci.compilers.EclipseJavaCompiler$2.findType(EclipseJavaCompiler.java:204)
同样是JDK版本导致的问题,如果采用JDK8,则可正常运作。同时,可考虑升级Drools版本到6及以上版本。不过需要留意的是Drools5和Drools6、7版本的跨度较大,整个API都进行了修改。
汇总
其实针对以上异常信息,汇总一下解决方案就是:换JDK、升级drtools、升级jdt core版本。
关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台
除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接
本文链接:https://choupangxia.com/2020/12/01/java-lang-runtimeexception-wrong-class-format-at/