Drools - Drools 6 中的 ClassCastException

Drools - ClassCastException in Drools 6

我在 Eclipse 中有一个非常简单的 Drools 项目,运行s 可以很好地完成,但是当我打开或单击我的 .drl 文件时,Eclipse 中会弹出以下错误:

An error has occurred. See error log for more details. org.drools.core.base.accumulators.BigDecimalSumAccumulateFunction cannot be cast to org.drools.runtime.rule.AccumulateFunction

当我点击确定并再次 运行 程序时,它仍然 运行 没问题。每当我单击 .drl 文件并单击回来时,错误再次弹出。 Eclipse 日志具有以下堆栈跟踪:

!ENTRY org.eclipse.ui.workbench 4 2 2016-08-25 23:35:24.144

!MESSAGE Problems occurred when invoking code from plug-in: "org.eclipse.ui.workbench".

!STACK 0 java.lang.ClassCastException: org.drools.core.base.accumulators.BigDecimalSumAccumulateFunction cannot be cast to org.drools.runtime.rule.AccumulateFunction at org.drools.compiler.PackageBuilderConfiguration.loadAccumulateFunction(PackageBuilderConfiguration.java:530) at org.drools.compiler.PackageBuilderConfiguration.buildAccumulateFunctionsMap(PackageBuilderConfiguration.java:479) at org.drools.compiler.PackageBuilderConfiguration.init(PackageBuilderConfiguration.java:194) at org.drools.compiler.PackageBuilderConfiguration.(PackageBuilderConfiguration.java:170) at org.drools.eclipse.DroolsEclipsePlugin.generateParsedResource(DroolsEclipsePlugin.java:612) at org.drools.eclipse.DroolsEclipsePlugin.parseResource(DroolsEclipsePlugin.java:515) at org.drools.eclipse.editors.outline.RuleContentOutlinePage.initRules(RuleContentOutlinePage.java:279) at org.drools.eclipse.editors.outline.RuleContentOutlinePage.update(RuleContentOutlinePage.java:159) at org.drools.eclipse.editors.outline.RuleContentOutlinePage.createControl(RuleContentOutlinePage.java:133)

在此处查看整个堆栈跟踪:http://pastebin.com/hJK1Cs03

我的程序:

import org.kie.api.KieServices;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;

public class GhostFactTest {

    public static final void main(String[] args) {
        try {
            // load up the knowledge base
            KieServices ks = KieServices.Factory.get();
            KieContainer kContainer = ks.getKieClasspathContainer();
            KieSession kSession = kContainer.newKieSession("ksession-rules");

            FruitFact f1 = new FruitFact(1, "APPLE", "RED");
            FruitFact f2 = new FruitFact(2, "APPLE", "GREEN");

            kSession.insert(f1);
            kSession.insert(f2);
            kSession.fireAllRules();

            System.out.println("\n********************\nSUCCESS!\n********************");

        } catch (Throwable t) {
            t.printStackTrace();
        }
    }
}

.drl 根本不需要任何规则来引发错误。编译时或 运行 时没有错误。

我将 Drools 6.[0-4].0.Final 作为单独的 Drools 安装 运行 次,除了 Drools 6.0.0.Final.我是运行宁Java7。我也可以 运行 一个非常相似的程序与 Drools 5.5。0.Final 没有任何问题。

鉴于程序成功执行预期行为,并且即使 .drl 为空也会抛出错误,我倾向于认为这是 Eclipse 和我的项目设置的问题。有没有人对如何解决这个问题有任何指导?提前致谢。

问题是我在 Drools 6 项目中使用 Drools 5.5。0.Final Eclipse 插件。升级到 Drools 6.4.0.Final Eclipse plug-in.

后问题消失了