2010-04-21 52 views
1

是否有一个更全面的快速启动drools 5.我试图运行简单的Hello World .drl规则,但我想通过一个蚂蚁脚本,可能与刚刚的javac/java的:非常基本的运行drools 5,基本设置和快速启动

我收到以下错误:请注意:我不感到没有Eclipse或任何其他IDE完全运行:

是否有一个更全面的快速启动Drools的5.我正在试图运行简单的Hello World .drl规则,但是我想通过一个ant脚本来完成,可能只需要javac/java:

我得到了foll由于错误:请注意:我不感到没有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代码,那也没用。

公共无效规则(){

/* 
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(); 

}

...

在这里,我不认为蚂蚁是相关的,因为我有叉设置为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();

我在Windows XP,Java6和Ant.1.7中运行。 最近(截至昨天)Drools-Rules第5版。

+0

你究竟是什么意思,“我没有完全没有Eclipse或任何其他IDE *运行”,你是否使用IDE? – 2016-07-07 07:07:20

回答

9

的关键问题是,这条线在错误清单: “:了java.lang.RuntimeException:由此造成的Eclipse的JDT核心罐子是不是在classpath”

此引用到由Eclipse Drools插件安装的库“core-3.4.2.v_883_R34x.jar”

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

2

我尝试了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>