在使用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版本。



java.lang.RuntimeException: wrong class format at插图

关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台

除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接

本文链接:https://choupangxia.com/2020/12/01/java-lang-runtimeexception-wrong-class-format-at/