Очень простой запуск drools 5, базовая настройка и быстрый запуск - PullRequest
1 голос
/ 22 апреля 2010

Есть ли более полный быстрый старт для drools 5. Я пытался запустить простое правило Hello World .drl, но я хотел сделать это с помощью скрипта ant, возможно, просто с помощью javac / java:

Я получаю следующую ошибку: Примечание: я не работаю полностью без Eclipse или любой другой IDE:

Есть ли более полный быстрый старт для drools 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 target:

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

}

... * * 1020

Здесь я не думаю, что Ant уместен, потому что у меня установлена ​​вилка в 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. Самая последняя (по состоянию на вчера) версия 5 Правил Drools.

Ответы [ 2 ]

9 голосов
/ 04 августа 2010

ключ к проблеме - эта строка в списке ошибок: «Причины: java.lang.RuntimeException: Jar Core Eclipse JDT не находится в пути к классам»

Это ссылка на библиотеку "core-3.4.2.v_883_R34x.jar", которая устанавливается плагином Eclipse Drools

Если вы добавите core-3.4.2.v_883_R34x.jar в свои библиотеки, вы не получите исключение времени выполнения.

2 голосов
/ 28 апреля 2010

Я попробовал HelloWorld с примерами drools-5.0, а затем ваш пример кода с помощью 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>
...