Drools 7.4.1 kieservices.factory.get()返回null

Kos*_*sis 4 drools kie

我尝试将Drools 7.4.1集成到tomcat中的Webapp中。

当我在代码中调用以下语句来获取KieService时,我会得到null

KieServices ks = KieServices.Factory.get();
Run Code Online (Sandbox Code Playgroud)

如果从测试方法中调用相同的方法,则可以。

有人可以帮忙吗?

nic*_*res 7

当我们尝试在带有嵌入式 Grizzly http 服务器的网络服务器中使用 Drools 时,我们遇到了同样的问题。

我们还需要添加 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
Run Code Online (Sandbox Code Playgroud)

我们将 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
Run Code Online (Sandbox Code Playgroud)

否则 KieServices 未加载并且 KieServices.Factory.get() 返回 null。

之后我们正在修改构建的 jar 使用

jar uf myjar.jar META-INF/kie.conf
Run Code Online (Sandbox Code Playgroud)

修改包含的 kie.conf 文件。我们找不到一个干净的 Maven 集成解决方案。欢迎任何建议...


fre*_*dev 6

您必须添加drools-compiler依赖项。

    <dependency>
        <groupId>org.drools</groupId>
        <artifactId>drools-compiler</artifactId>
        <version>7.4.1</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)


小智 5

感谢您的提示nicole.torres。

对于这个问题,我们可以在maven-shade-plugin资源转换器中使用appendingtransformer:

https://maven.apache.org/plugins/maven-shade-plugin/examples/resource-transformers.html#AppendingTransformer

使用此文件,我们可以附加所有META-INF / kie.conf文件。在ubber jar中创建KieBase或KieContainer时面对空指针的任何人,请访问此线程。我花了三天的时间找到解决方案,并尝试为网上几乎所有可恶的流口水示例创建一个ubber jar :(