我在 Eclipse 中有一个非常简单的 Drools 项目,可以正常运行,但是当我打开或单击我的 .drl 文件时,Eclipse 中会弹出以下错误:
发生了错误。有关详细信息,请参阅错误日志。org.drools.core.base.accumulators.BigDecimalSumAccumulateFunction 不能转换为 org.drools.runtime.rule.AccumulateFunction
当我点击 OK 并再次运行程序时,它仍然运行良好。每当我从 .drl 文件中单击并重新单击时,都会再次弹出错误。Eclipse 日志具有以下堆栈跟踪:
!ENTRY org.eclipse.ui.workbench 4 2 2016-08-25 23:35:24.144
!MESSAGE 从插件调用代码时出现问题:“org.eclipse.ui.workbench”。
!STACK 0 java.lang.ClassCastException: org.drools.core.base.accumulators.BigDecimalSumAccumulateFunction 不能在 org.drools.compiler.PackageBuilderConfiguration.loadAccumulateFunction(PackageBuilderConfiguration.java:530) 中转换为 org.drools.runtime.rule.AccumulateFunction在 org.drools.compiler.PackageBuilderConfiguration.buildAccumulateFunctionsMap(PackageBuilderConfiguration.java:479) 在 org.drools.compiler.PackageBuilderConfiguration.init(PackageBuilderConfiguration.java:194) 在 org.drools.compiler.PackageBuilderConfiguration.(PackageBuilderConfiguration.java:170)在 org.drools.eclipse.DroolsEclipsePlugin.generateParsedResource(DroolsEclipsePlugin.java:612) 在 org.drools.eclipse.DroolsEclipsePlugin.parseResource(DroolsEclipsePlugin.java:515) 在 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 和我的项目设置的问题。有人对如何解决这个问题有任何指导吗?提前致谢。