我完全是在Java环境中执行的新手,Eclipse和Drools。但我从其他从未得到答案的人那里看到了同样的问题,所以我会发布我的问题。
我已经按照Eclipse中Drools的安装说明进行操作。然后尝试运行DroolsTest.Java
并收到以下消息:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
java.lang.NullPointerException
at com.sample.DroolsTest.main(DroolsTest.java:23)
上述网站上的消息建议将.jar(只是其中一个)添加到Classpath。我在Drools 6 Runtime目录中有一个,所以将它添加到我的类路径中。见下文。
Classpath:C:\ Program Files \ Java \ jre6 \ lib \ ext \ QTJava.zip; C:\ 0 TM Stuff \ BRE Review \ Drools 6 Runtime \ slf4j-api.jar
我已经在2台不同的笔记本电脑上安装了Windows 7并获得了相同的结果。
我现在死在水里。任何想要克服这种情况的想法都非常感谢。
特里
这是代码。这是问题行kSession.insert(message);
package com.sample;
import org.kie.api.KieServices;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;
/ ** *这是启动规则的示例类。 * / 公共课DroolsTest {
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");
// go !
Message message = new Message();
message.setMessage("Hello World");
message.setStatus(Message.HELLO);
kSession.insert(message);
kSession.fireAllRules();
} catch (Throwable t) {
t.printStackTrace();
}
}
public static class Message {
public static final int HELLO = 0;
public static final int GOODBYE = 1;
private String message;
private int status;
public String getMessage() {
return this.message;
}
public void setMessage(String message) {
this.message = message;
}
public int getStatus() {
return this.status;
}
public void setStatus(int status) {
this.status = status;
}
}
}
答案 0 :(得分:3)
安装m2e Maven Eclipse插件,使Eclipse能够正确配置依赖项。
要让m2e更新您的项目,请右键单击您的项目并转到“Maven” - > “更新项目”,它应该更新它并将所有Drools依赖项放在类路径上。
请注意,如果使用SLF4J,您还需要在pom.xml中使用日志记录实现。例如,我倾向于使用Log4J日志记录实现,如下所示:
<!-- The SLF4J API, which you may already have on your classpath,
as it looks like Drools imports it. -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.5</version>
</dependency>
<!-- The SLF4J Log4J implementation. This contains the StaticLoggerBinder class. -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.5</version>
</dependency>
答案 1 :(得分:0)
你的类路径中应该有这两个jar文件(/ extra是我的本地根目录):
/extra/slf4j-1.7.5/slf4j-simple-1.7.5.jar:/extra/slf4j-1.7.5/slf4j-api-1.7.5.jar
但是关于丢失记录器的消息不应该导致NPE,所以可能在你的DroolsTest.java中有其他东西。请出示来源。