Мне удалось успешно прочитать правила из каталога src/main/rules, и мой проект слюни работает нормально.
Моя проблема возникает, однако, когда я хочу прочитать набор правил из другого каталога, например, у меня есть второй проект слюни с идентичными правилами. попытка прочитать правила из /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 (в проекте слюни) безуспешно.
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) и запустить проект, используя указанный файл правил.




Вы можете использовать следующий подход для загрузки файла правил из файловой системы:
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();
Исправил, почему-то не нравится '#' в файле: /: facepalm:
Спасибо! Это устранило проблему с файлом "не найден". Однако теперь меня мучает новая проблема.
Cannot find KieModule: org.default:artifact:1.0.0Я где-то читал, что это может быть проблема с моими правилами? Однако это очень простое правило с одним оператором печати ... вот правило ptpb.pw/geoL