我使用的是 kie-api 7.6.0。
当我尝试获取 kieservices.factory.get()
时,它返回 null
。
我的Java项目是一个gradle项目。
可能是什么原因?我的Java项目是一个gradle项目。
final ReleaseIdImpl releaseId = new ReleaseIdImpl(RULE_PACKAGE, RULE_NAME,
RULE_VERSION);
final KieServices ks = KieServices.Factory.get();
final KieContainer kContainer = ks.newKieContainer(releaseId);
我将 ks 设为 null,因此在 ks.newKieContainer(releaseId); 处出现 NullPointerException;
我已经添加了以下 jar 的依赖项
drools-compiler-6.5.0.Final.jar
drools-core-6.5.0.Final.jar
drools-decisiontables-6.5.0.Final.jar
drools-jsr94-6.5.0.Final.jar
drools-persistence-jpa-6.5.0.Final.jar
drools-templates-6.5.0.Final.jar
org.drools.eclipse-6.5.0.Final.jar
kie-maven-plugin-6.5.0.Final.jar
kie-api-6.5.0.Final.jar
kie-ci-6.5.0.Final.jar
kie-internal-6.5.0.Final.jar
最佳答案
我相信这与这里的原因相同:Drools 7.4.1 kieservices.factory.get() returns null
这是我的回答。
当我们尝试在我们的网络服务器中使用 Drools 时,我们遇到了同样的问题 嵌入式 Grizzly http 服务器。
我们还需要添加 drools-compiler 依赖项,但仅此并不能解决问题。
由于类路径上存在来自不同依赖项的多个 kie.conf 文件,因此 uber-jar 最终只有一个,并且缺少要加载的类的定义。
除了 drools-core kie.conf 中的这些条目之外:
org.kie.api.io.KieResources = org.drools.core.io.impl.ResourceFactoryServiceImpl
org.kie.api.marshalling.KieMarshallers = org.drools.core.marshalling.impl.MarshallerProviderImpl
org.kie.api.concurrent.KieExecutors = org.drools.core.concurrent.ExecutorProviderImpl
我们将这些行从 drools-compiler 添加到我们的 uber-jar kie.conf:
org.kie.api.KieServices = org.drools.compiler.kie.builder.impl.KieServicesImpl
org.kie.internal.builder.KnowledgeBuilderFactoryService = org.drools.compiler.builder.impl.KnowledgeBuilderFactoryServiceImpl
否则 KieServices 未加载并且 KieServices.Factory.get() 返回 null。
我们随后使用
修改构建的 jarjar uf myjar.jar META-INF/kie.conf
修改包含的 kie.conf 文件。我们无法找到一个干净的 Maven 集成解决方案。欢迎任何建议...
关于java - kieservices.factory.get() 在 kie-api7.6.0 中返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49295671/