Java drools 5 的基本运行、基本设置和快速入门
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/2687279/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Very basic running of drools 5, basic setup and quickstart
提问by Berlin Brown
Is there a more comprehensive quick start for drools 5. I was attempting to run the simple Hello World .drl rule but I wanted to do it through an ant script, possibly with just javac/java:
是否有更全面的 drools 快速入门 5. 我试图运行简单的 Hello World .drl 规则,但我想通过 ant 脚本来完成,可能只使用 javac/java:
I get the following error: Note: I don't am running completely without Eclipse or any other IDE:
我收到以下错误:注意:没有 Eclipse 或任何其他 IDE,我不会完全运行:
Is there a more comprehensive quick start for drools 5. I was attempting to run the simple Hello World .drl rule but I wanted to do it through an ant script, possibly with just javac/java:
是否有更全面的 drools 快速入门 5. 我试图运行简单的 Hello World .drl 规则,但我想通过 ant 脚本来完成,可能只使用 javac/java:
I get the following error: Note: I don't am running completely without Eclipse or any other IDE:
我收到以下错误:注意:没有 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
...
...
I do include the following libraries with my javac and java target:
我确实在我的 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>
Here is the Java code that is throwing the error. I commented out the java.compiler code, that didn't work either.
这是引发错误的 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();
}
}
...
...
Here I don't think Ant is relevant because I have fork set to true:
在这里,我认为 Ant 无关紧要,因为我已将 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>
The error is thrown at line 1.
错误在第 1 行抛出。
Basically, I haven't done anything except call
基本上,除了打电话,我什么都没做
final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
最终的 KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
I am running with Windows XP, Java6, and within Ant.1.7. The most recent (as of yesterday) version 5 of Drools-Rules.
我在 Windows XP、Java6 和 Ant.1.7 中运行。Drools-Rules 的最新(截至昨天)第 5 版。
采纳答案by dshields
the key to the problem is this line in the error listing: "Caused by: java.lang.RuntimeException: The Eclipse JDT Core jar is not in the classpath"
问题的关键是错误列表中的这一行:“Caused by: java.lang.RuntimeException: The Eclipse JDT Core jar is not in the classpath”
This reference is to the library "core-3.4.2.v_883_R34x.jar" which is installed by the Eclipse Drools plugin
此引用指向由 Eclipse Drools 插件安装的库“core-3.4.2.v_883_R34x.jar”
If you add core-3.4.2.v_883_R34x.jar to your libraries then you won't get the runtime exception.
如果您将 core-3.4.2.v_883_R34x.jar 添加到您的库中,那么您将不会收到运行时异常。
回答by Mark McLaren
I tried the drools-5.0-examples HelloWorld and then your example code using Maven and managed to get it working. I then constructed an Ant build file with the characteristics that you describe and got exactly the same result that you did.
我尝试了 drools-5.0-examples HelloWorld,然后使用 Maven 尝试了您的示例代码并设法让它工作。然后,我构建了一个具有您描述的特征的 Ant 构建文件,并得到了与您所做的完全相同的结果。
I noticed that the Maven version contains many more dependent libraries. If I copy these dependencies from Maven into Ant version "lib" directory and update the build.xml to include these then your code works fine.
我注意到 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>