StaticLoggerBinder,Drools,Eclipse

时间:2014-01-25 02:09:07

标签: eclipse drools

我完全是在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;
        }

    }

}

2 个答案:

答案 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中有其他东西。请出示来源。