在使用最新版的drools时,运行程序会抛出如下异常:

Exception in thread "main" java.lang.RuntimeException: You're trying to compile a Drools asset without mvel. Please add the module org.drools:drools-mvel to your classpath.
	at org.drools.core.base.CoreComponentsBuilder.throwExceptionForMissingMvel(CoreComponentsBuilder.java:34)
	at org.drools.compiler.compiler.Dialect$DummyDialect.getConsequenceBuilder(Dialect.java:281)
	at org.drools.compiler.rule.builder.RuleBuilder.build(RuleBuilder.java:124)

在之前版本同样的程序却可以正常运行,这是为什么呢?

其实在drools7.44.0开始,已经开始对drools-core对应的jar包进行简化操作,把与规则引擎计算无关的功能逐步单独抽离出来。其中drools7.44.0就是个分水岭,此版本及之前版本如果引入如下依赖:

        <dependency>
            <groupId>org.kie</groupId>
            <artifactId>kie-api</artifactId>
            <version>${drools.version}</version>
        </dependency>
        <dependency>
            <groupId>org.drools</groupId>
            <artifactId>drools-core</artifactId>
            <version>${drools.version}</version>
        </dependency>
        <dependency>
            <groupId>org.drools</groupId>
            <artifactId>drools-compiler</artifactId>
            <version>${drools.version}</version>
        </dependency>

程序就可以正常运行了,但是drools7.45.0开始,还需要单独引入mvel相关的依赖,原本在drools core中的mvel,已经被抽离出来,作为独立模块了。

<dependency>
      <groupId>org.drools</groupId>
      <artifactId>drools-mvel</artifactId>
      <version>${drools.version}</version>
</dependency>

另外,我们不要被mvel误导,以为只有用到mvel方言时才会用到该依赖,其实在drl文件解析等功能下都用到了mvel。所以,在新版本中,如果出现上述异常,则需要引入对应的drools-mvel依赖。



Drools异常:You’re trying to compile a Drools asset without mvel.插图

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

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

本文链接:https://choupangxia.com/2021/01/18/drools-without-mvel/