【问题标题】:Drools file not found exceptionDrools 文件未找到异常
【发布时间】:2019-03-29 11:25:21
【问题描述】:

我已经能够成功地从目录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)并使用所述规则文件运行项目。

【问题讨论】:

    标签: java eclipse file-io drools


    【解决方案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();
    

    【讨论】:

    • 谢谢!这解决了找不到文件的问题。但是现在我被一个新问题所困扰。 Cannot find KieModule: org.default:artifact:1.0.0我在某处读到这可能是我的规则的问题?然而,这是一条非常简单的规则,只有一条打印语句……这是规则ptpb.pw/geoL
    • 我修复了它,由于某种原因它不喜欢文件中的 '#' :/ :facepalm:
    猜你喜欢
    • 2019-06-26
    • 2012-01-06
    • 1970-01-01
    • 1970-01-01
    • 2016-12-03
    • 2019-09-29
    • 2018-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多