找不到Drools文件异常

时间:2018-10-24 23:29:07

标签: java eclipse file-io drools

我已经能够从目录src/main/rules中成功读取规则,并且我的drools项目工作正常。

但是,当我想从其他目录中读取规则集时,就会出现我的问题,例如,我有另一个具有相同规则的drools项目。尝试从/home/user/Documents/workspace/OtherProject/src/main/ruls/Ruleset.drl中读取规则会导致错误

"/home/user/Documents/workspace/DroolsProject/src/main/rules/Ruleset.drl" cannot be opened because it does not exist

我已经多次检查文件是否存在,甚至将输出从pwd复制并粘贴到我的PATH变量(在drools项目中)都没有运气。

private static KnowledgeBase readKnowledgeBase(String ruleSet) throws Exception {
    KnowledgeBuilder builder = KnowledgeBuilderFactory.newKnowledgeBuilder();
    builder.add(
            ResourceFactory.newClassPathResource(
                    "/home/user/Documents/workspace/DroolsProject/src/main/rules/Ruleset.drl"),
            ResourceType.DRL);
    KnowledgeBuilderErrors errors = builder.getErrors();
    if (errors.size() > 0) {
        for (KnowledgeBuilderError error : errors)
            System.err.println(error);
        throw new IllegalArgumentException("Could not parse knowledge :(");
    }
    KnowledgeBase base = KnowledgeBaseFactory.newKnowledgeBase();
    base.addKnowledgePackages(builder.getKnowledgePackages());
    return base;
}

这是我用来加载规则的方法。

最终目标是将规则文件上传到服务器(可能是/tmp),并使用该规则文件运行项目。

1 个答案:

答案 0 :(得分:1)

您可以按照以下方法从文件系统加载规则文件:

KieServices kieServices = KieServices.Factory.get();
KieFileSystem kfs = kieServices.newKieFileSystem();

File file = new File("path/to/Rule.drl");
org.kie.api.io.Resource resource = kieServices.getResources().newFileSystemResource(file).setResourceType(ResourceType.DRL);
kfs.write(resource);

KieBuilder Kiebuilder = kieServices.newKieBuilder(kfs);
Kiebuilder.buildAll();
KieContainer kieContainer = kieServices.newKieContainer(kieServices.getRepository().getDefaultReleaseId());
KieSession ksession = kieContainer.newKieSession();