代码之家  ›  专栏  ›  技术社区  ›  Berlin Brown

Drools 5的基本运行、基本设置和快速启动

  •  1
  • Berlin Brown  · 技术社区  · 15 年前

    有没有一个更全面的快速启动口水5。我试图运行简单的Hello World .DRL规则,但我想通过一个Ant脚本来完成它,可能只使用JavaC/Java:

    我得到以下错误:注意:没有eclipse或任何其他ide,我不会完全运行:

    有没有一个更全面的快速启动口水5。我试图运行简单的Hello World .DRL规则,但我想通过一个Ant脚本来完成它,可能只使用JavaC/Java:

    我得到以下错误:注意:没有eclipse或任何其他ide,我不会完全运行:

    test:
         [java] Exception in thread "main" org.drools.RuntimeDroolsException: Unable to load d
    ialect 'org.drools.rule.builder.dialect.java.JavaDialectConfiguration:java:org.drools.rule
    .builder.dialect.java.JavaDialectConfiguration'
         [java]     at org.drools.compiler.PackageBuilderConfiguration.addDialect(PackageBuild
    erConfiguration.java:274)
         [java]     at org.drools.compiler.PackageBuilderConfiguration.buildDialectConfigurati
    onMap(PackageBuilderConfiguration.java:259)
         [java]     at org.drools.compiler.PackageBuilderConfiguration.init(PackageBuilderConf
    iguration.java:176)
         [java]     at org.drools.compiler.PackageBuilderConfiguration.<init>(PackageBuilderCo
    nfiguration.java:153)
         [java]     at org.drools.compiler.PackageBuilder.<init>(PackageBuilder.java:242)
         [java]     at org.drools.compiler.PackageBuilder.<init>(PackageBuilder.java:142)
         [java]     at org.drools.builder.impl.KnowledgeBuilderProviderImpl.newKnowledgeBuilde
    r(KnowledgeBuilderProviderImpl.java:29)
         [java]     at org.drools.builder.KnowledgeBuilderFactory.newKnowledgeBuilder(Knowledg
    eBuilderFactory.java:29)
         [java]     at org.berlin.rpg.rules.Rules.rules(Rules.java:33)
         [java]     at org.berlin.rpg.rules.Rules.main(Rules.java:73)
         [java] Caused by: java.lang.RuntimeException: The Eclipse JDT Core jar is not in the
    classpath
         [java]     at org.drools.rule.builder.dialect.java.JavaDialectConfiguration.setCompil
    er(JavaDialectConfiguration.java:94)
         [java]     at org.drools.rule.builder.dialect.java.JavaDialectConfiguration.init(Java
    DialectConfiguration.java:55)
         [java]     at org.drools.compiler.PackageBuilderConfiguration.addDialect(PackageBuild
    erConfiguration.java:270)
         [java]     ... 9 more
         [java] Java Result: 1
    
    ...
    ...
    

    我的JavaC和Java目标包括以下库:

     <path id="classpath">
         <pathelement location="${lib.dir}" />
         <pathelement location="${lib.dir}/drools-api-5.0.1.jar" />
         <pathelement location="${lib.dir}/drools-compiler-5.0.1.jar" />
         <pathelement location="${lib.dir}/drools-core-5.0.1.jar" />
         <pathelement location="${lib.dir}/janino-2.5.15.jar" />
     </path>
    

    下面是正在抛出错误的Java代码。我注释掉了java.compiler代码,这也不起作用。

    public void rules(){

    /*
    final Properties properties = new Properties(); 
    properties.setProperty( "drools.dialect.java.compiler", "JANINO" ); 
    PackageBuilderConfiguration cfg = new PackageBuilderConfiguration( properties ); 
    JavaDialectConfiguration javaConf = (JavaDialectConfiguration) 
    cfg.getDialectConfiguration( "java" ); 
    */
    final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
    
    // this will parse and compile in one step
    kbuilder.add(ResourceFactory.newClassPathResource("HelloWorld.drl", Rules.class), ResourceType.DRL);
    
    // Check the builder for errors
    if (kbuilder.hasErrors()) {
        System.out.println(kbuilder.getErrors().toString());
        throw new RuntimeException("Unable to compile \"HelloWorld.drl\".");
    }
    
    // Get the compiled packages (which are serializable)
    final Collection<KnowledgePackage> pkgs = kbuilder.getKnowledgePackages();
    
    // Add the packages to a knowledgebase (deploy the knowledge packages).
    final KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
    kbase.addKnowledgePackages(pkgs);
    
    final StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
    ksession.setGlobal("list", new ArrayList<Object>());
    
    ksession.addEventListener(new DebugAgendaEventListener());
    ksession.addEventListener(new DebugWorkingMemoryEventListener());
    
    // Setup the audit logging
    KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory.newFileLogger(ksession, "log/helloworld");
    
    final Message message = new Message();
    message.setMessage("Hello World");
    message.setStatus(Message.HELLO);
    ksession.insert(message);
    
    ksession.fireAllRules();
    logger.close();
    ksession.dispose();
    

    }

    我认为蚂蚁与此无关,因为我已经将fork设置为true:

     <target name="test" depends="compile">
         <java classname="org.berlin.rpg.rules.Rules" fork="true">
             <classpath refid="classpath.rt" />
             <classpath>
                 <pathelement location="${basedir}" />
                 <pathelement location="${build.classes.dir}" />
             </classpath>
         </java>
     </target>
    

    在第1行引发错误。

    基本上,除了打电话我什么也没做

    final knowledgebuilder kbuilder=knowledgebuilderfactory.newknowledgebuilder();

    我使用WindowsXP、Java6和Ant.1.7运行。 最近(截至昨天)的第5版口水规则。

    2 回复  |  直到 14 年前
        1
  •  9
  •   dshields    14 年前

    问题的关键在于错误列表中的这一行: “原因:java.lang.RuntimeException:EclipseJDTCoreJAR不在类路径中”

    此引用是指由eclipse drools插件安装的库“core-3.4.2.v_883_r34x.jar”

    如果将core-3.4.2.v_883_r34x.jar添加到库中,则不会得到运行时异常。

        2
  •  2
  •   Mark McLaren    15 年前

    我尝试了drools-5.0-examples helloworld,然后使用maven编写了示例代码,并成功地使其工作。然后我用您描述的特性构建了一个ant构建文件,得到了与您完全相同的结果。

    我注意到maven版本包含更多的依赖库。如果我将这些依赖项从maven复制到ant版本的“lib”目录中,并更新build.xml以包含这些依赖项,那么您的代码可以正常工作。

    <path id="classpath.rt">
      <pathelement location="${lib.dir}/antlr-runtime-3.1.1.jar" />
      <pathelement location="${lib.dir}/core-3.4.2.v_883_R34x.jar" />
      <pathelement location="${lib.dir}/drools-api-5.0.1.jar" />
      <pathelement location="${lib.dir}/drools-compiler-5.0.1.jar" />
      <pathelement location="${lib.dir}/drools-core-5.0.1.jar" />
      <pathelement location="${lib.dir}/drools-transformer-xstream-5.0.1.jar" />
      <pathelement location="${lib.dir}/janino-2.5.15.jar" />
      <pathelement location="${lib.dir}/joda-time-1.6.jar" />
      <pathelement location="${lib.dir}/mvel2-2.0.10.jar" />
      <pathelement location="${lib.dir}/xpp3_min-1.1.4c.jar" />
      <pathelement location="${lib.dir}/xstream-1.3.1.jar" />      
    </path>