【问题标题】:Java/JAR program can not find Drools filesJava/JAR 程序找不到 Drools 文件
【发布时间】:2015-07-16 03:15:01
【问题描述】:

我正在开发 Drools Drools/Java 程序 (Drools 6.2)。我有 3 个单独的流口水文件 (.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 文件中包含任何内容吗? 我应该以不同的方式触发规则吗?

【问题讨论】:

    标签: java maven jar drools java-io


    【解决方案1】:

    尝试加载您的文件

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

    还要确保你的 pom 中添加了资源

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

    【讨论】:

    • 你可以尝试调试:System.out.println(classLoader.getResource("rules/Rule1.drl"));
    • 我认为你错过了路径开头的“/”:File file = new File(classLoader.getResource("/rules/Rule1.drl").getFile());
    猜你喜欢
    • 2013-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-09
    • 2016-10-02
    • 1970-01-01
    • 2019-03-29
    相关资源
    最近更新 更多