我尝试将Drools 7.4.1集成到tomcat中的Webapp中。
当我在代码中调用以下语句来获取KieService时,我会得到null。
KieServices ks = KieServices.Factory.get();
如果从测试方法中调用相同的方法,则可以。
有人可以帮忙吗?
当我们尝试在带有嵌入式 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
我们将 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。
之后我们正在修改构建的 jar 使用
jar uf myjar.jar META-INF/kie.conf
修改包含的 kie.conf 文件。我们找不到一个干净的 Maven 集成解决方案。欢迎任何建议...
您必须添加drools-compiler依赖项。
    <dependency>
        <groupId>org.drools</groupId>
        <artifactId>drools-compiler</artifactId>
        <version>7.4.1</version>
    </dependency>
小智 5
感谢您的提示nicole.torres。
对于这个问题,我们可以在maven-shade-plugin资源转换器中使用appendingtransformer:
使用此文件,我们可以附加所有META-INF / kie.conf文件。在ubber jar中创建KieBase或KieContainer时面对空指针的任何人,请访问此线程。我花了三天的时间找到解决方案,并尝试为网上几乎所有可恶的流口水示例创建一个ubber jar :(