学习Drools的Examples时,Drools的例子程序分为3大目录存放
drools-examples/src/main/java --java源程序
drools-examples/src/main/resources --Drools规则
drools-examples/target/classes --目标程序输出
在Eclipse中创建的Drools项目中,默认目录结构是:
./src/main/java --java源程序
./src/main/rules --Drools规则
./bin --目标程序输出
当将例子中的Drools规则文件copy到自己的项目rules目录下,没有按照drl中的Package进行目录结构组织时,执行例子程序报错:
Exception in thread "main" java.lang.NullPointerException
at java.io.Reader.<init>(Unknown Source)
at java.io.InputStreamReader.<init>(Unknown Source)
at org.drools.examples.state.StateExampleUsingSalience.main(StateExampleUsingSalience.java:39)
解决方法:
方法1.将main 程序中的规则加载语句修改下,补充getClassLoader() 即可:
builder.addPackageFromDrl( new InputStreamReader( StateExampleUsingSalience.class.getResourceAsStream( "StateExampleUsingSalience.drl" ) ) );
builder.addPackageFromDrl( new InputStreamReader( StateExampleUsingSalience.class.getClassLoader().getResourceAsStream( "StateExampleUsingSalience.drl" ) ) );
方法2.
按照规则文件(drl)中的Package,将规则文件放到该目录结构中,即可。