我正在用Java运行drools项目。线KnowledgeBase kbase = readKnowledgeBase();
给出了以下例外:
java.lang.NoSuchMethodError: org.drools.util.CompositeClassLoader.clone()Lorg/drools/util/CompositeClassLoader;
at org.drools.compiler.PackageBuilderConfiguration.getClassLoader(PackageBuilderConfiguration.java:322)
at org.drools.rule.builder.dialect.java.JavaDialectConfiguration.setCompiler(JavaDialectConfiguration.java:91)
at org.drools.rule.builder.dialect.java.JavaDialectConfiguration.init(JavaDialectConfiguration.java:54)
at org.drools.compiler.PackageBuilderConfiguration.addDialect(PackageBuilderConfiguration.java:273)
at org.drools.compiler.PackageBuilderConfiguration.buildDialectConfigurationMap(PackageBuilderConfiguration.java:262)
at org.drools.compiler.PackageBuilderConfiguration.init(PackageBuilderConfiguration.java:175)
at org.drools.compiler.PackageBuilderConfiguration.<init>(PackageBuilderConfiguration.java:153)
at org.drools.compiler.PackageBuilder.<init>(PackageBuilder.java:254)
at org.drools.compiler.PackageBuilder.<init>(PackageBuilder.java:182)
at org.drools.builder.impl.KnowledgeBuilderFactoryServiceImpl.newKnowledgeBuilder(KnowledgeBuilderFactoryServiceImpl.java:34)
at org.drools.builder.KnowledgeBuilderFactory.newKnowledgeBuilder(KnowledgeBuilderFactory.java:47)
at com.sample.TestExample.readKnowledgeBase(TestExample.java:36)
at com.sample.TestExample.ProductClassHolder(TestExample.java:56)
at com.sample.TestExample.main(TestExample.java:30)
我有同样的问题,并在一段时间内与它斗争。在我的情况下,问题是由于库drools-api.jar v5.1.1和knowledge-api-5.4.0.Final.jar在运行时的冲突。这两个库都有类org.drools.util.CompositeClassLoader
,但是drools-api.jar中的那个没有clone()
方法,而且它在运行时加载了。我删除了drools-api.jar,现在它工作正常,规则也正在执行。