2010-04-21 2 views
1

drools 5에 대한보다 포괄적 인 빠른 시작이 있습니까? 간단한 Hello World .drl 규칙을 실행하려고 시도했지만 ant 스크립트를 통해이를 수행하려고했습니다. 단지 javac의/자바 :매우 기본적인 drools 5의 실행, 기본 설정 및 빠른 시작

내가받을 다음과 같은 오류 : 참고 :

내가하려고 시도했습니다이 샘에 대한보다 포괄적 인 빠른 시작 5. 거기 : 나는 이클립스 또는 다른 IDE없이 완전히 실행하고 있지 않습니다 간단한 Hello World .drl 규칙을 실행하지만 개미 스크립트를 통해 javac/java와 함께 사용하고 싶었습니다.

나는 때문에 오류 : 참고 :

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의 및 자바 대상으로 다음과 같은 라이브러리를 포함 할 : 나는 이클립스 또는 다른 IDE없이 완전히 실행하고 있지 않습니다 여기

<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.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(); 

} ...

내가 참으로 포크 세트가 있기 때문에 개미 관련되어 있다고 생각하지 않습니다 여기에

:

<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를 사용하고 있습니까? –

답변

9

문제의 열쇠는 오류 목록에서이 라인은 다음과 같습니다 "java.lang.RuntimeException가 :에 의한 이클립스 JDT 코어 항아리 클래스 경로에없는"

이 참조가 있습니다 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>