2

我从流口水开始。我收到一个类路径错误。不确定,我在这里缺少什么。有什么提示吗?

主班

KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newClassPathResource("sample.drl"),ResourceType.DRL);
KnowledgeBase kbase = kbuilder.newKnowledgeBase();
StatelessKnowledgeSession ksession = kbase.newStatelessKnowledgeSession();
Account account = new Account(200);
account.withdraw(100);
ksession.execute(account);

}

示例.drl

//创建于:2013 年 5 月 27 日

package com.rules

//list any import classes here.
import com.model


//declare any global variables here

rule "accountBalanceAtLeast"

    when
        //conditions
        $account : Account( balance < 100)
    then
        //actions
        System.out.println("Warning, Running out of money.");

end

控制台错误

在此处输入图像描述

项目设置 在此处输入图像描述

4

3 回答 3

8

我建议您移动sample.drlsrc/main/resources然后使用:

kbuilder.add(ResourceFactory.newClassPathResource("sample.drl"),ResourceType.DRL);

如果您决定将您的 drl 文件放在 内部的不同文件夹中src/main/resources,比如说salesRulesand validationRules,那么您应该使用:

kbuilder.add(ResourceFactory.newClassPathResource("salesRules/rules.drl"),ResourceType.DRL); kbuilder.add(ResourceFactory.newClassPathResource("validationRules/rules.drl"),ResourceType.DRL);

如果您仍然希望在您的 java 包中包含您的 drl 文件,请尝试以下操作:

kbuilder.add(ResourceFactory.newClassPathResource("com/rules/sample.drl"),ResourceType.DRL);

希望能帮助到你

于 2013-05-29T08:20:46.553 回答
2

只是为了帮助:如果有人使用代码:

KieFileSystem kieFileSystem = kieServices.newKieFileSystem();    
Resource resource = kieResources.newClassPathResource("EvaluationDossier.drl");
String resourcepath = "src/main/resources/rules" + "/" + "RulesCompiled.drl";
kieFileSystem.write(resourcepath, resource);

并面临这个例外:

Exception in thread « main » java.lang.RuntimeException: Unable to get LastModified for ClasspathResource
..........................
Caused by: java.io.FileNotFoundException: ‘EvaluationDossier.drl’ cannot be opened because it does not exist

经过几次搜索后,我通过在 pom.xml 中添加这些行来解决它

<build>
        <resources>
            <resource>
                <directory>src/main/resources/rules</directory>
            </resource>
            <resource>
                <directory>src/main/java</directory>
            </resource>
        </resources>
    </build>
于 2017-11-23T10:35:55.837 回答
0

通常,您应该将引用的文件保存在源目录下。例如“src”下的普通文件和“test”下的测试文件。它们应该与使用它们的代码共享公共父目录。

于 2016-07-20T10:25:57.703 回答