Java / JAR程序找不到Drools文件

时间:2015-07-16 03:15:02

标签: java maven jar drools java-io

我正在研究Drools Drools / Java程序(Drools 6.2)。我有3个单独的drools文件(.drl)存储规则。当我使用Maven构建和部署该程序时,它会创建一个JAR文件,并且规则在这个JAR文件中的" rules"夹。但是,当我运行此程序时,它找不到Drools文件而不会触发它们。

我得到的错误是:

 "java.io.FileNotFoundException: /src/main/resources/rules/Rule1.drl (No such file or directory)"

该计划的结构如下:

src - main
           - java - com - Java files
           - resources - rules - Drools files.

这是调用和触发规则的方法。

String drlFileName = "./src/main/resources/rules/Rule1.drl");   

KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();

FileInputStream fis = null;
try {
    fis = new FileInputStream(drlFileName);
} catch (FileNotFoundException e) {
    e.printStackTrace();
}

kbuilder.add( ResourceFactory.newInputStreamResource(fis), ResourceType.DRL);       
KnowledgeBuilderErrors errors = kbuilder.getErrors();
if (errors.size() > 0) {
    for (KnowledgeBuilderError error: errors) {
         System.err.println(error);
     }
     throw new IllegalArgumentException("Could not parse knowledge.");
}
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
//Create a kbase using the generated kpackages
kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
StatefulKnowledgeSession kSession = kbase.newStatefulKnowledgeSession();

当程序运行并尝试触发规则时,我应该怎么做,它知道这些Drools文件在哪里?

我应该在.classpath文件或pom.xml文件中包含任何内容吗? 我应该以不同的方式解雇规则吗?

1 个答案:

答案 0 :(得分:0)

尝试加载文件

ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource("rules/Rule1.drl").getFile());

还要确保在pom中添加了资源

< resources >  
       < resource >  
          < directory > src/main/resources </ directory >  
       </ resource >  
   </ resources >