2010-04-21 25 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>