Java/JAR 程序找不到 Drools 文件

标签 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 文件中包含任何内容吗? 我应该以不同的方式触发规则吗?

最佳答案

尝试加载您的文件

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

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

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

关于Java/JAR 程序找不到 Drools 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31444797/

相关文章:

java - 使用递归制作星条旗图案

java - 大公司如何解决包依赖冲突问题?

java - 如何为我的java应用程序+ mysql创建可安装的(从maven构建spring boot创建的jar)

java - 在资源中找到未签名的条目

java - 计算2的幂,java

java - Android 14 及更高版本是否可以使用 Java 8 功能Optional 和 Stream

java - Maven Surefire 插件未进行测试

java - 如何上传仅供私有(private)使用的 Android 库?

java - 从类路径中动态删除 jar

java - 计时器和 Action 在java中执行