从classpath中挑选下列文件:6.1. The Basics我创建了应该由KieContainer类路径装载DRL文件中确认一个简单的类申请人。无法在滴料运行的hello world - DLR文件不受KieContainer
从DOC:
“在这一点上,可以创建一个KieContainer读取文件,将建成从classpath
KieServices kieServices = KieServices.Factory.get();
KieContainer kContainer = kieServices.getKieClasspathContainer();
上面的代码片断编译所有在类路径中找到的DRL文件,并把这个编译的结果,一个KieModule,放在KieContainer中。如果没有错误,我们现在准备从KieContainer创建我们的会话并执行一些数据:..“
问题是drl(规则文件)没有被KieContainer加载到项目中,也没有应用到我的测试对象。
测试方法:
前两行是从旧版本只是为了检查该文件实际上是在类路径上。它确实找到规则文件。规则文件位于:src/main/resources/bla/checkLicense.drl - 在资源下正确。
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newClassPathResource("bla/checkLicense.drl"), ResourceType.DRL);
KieServices kieServices = KieServices.Factory.get();
KieContainer kContainer = kieServices.getKieClasspathContainer();
KieSession kSession = kContainer.newKieSession();
Applicant applicant = new Applicant("Mr John Smith",16);
System.out.println(applicant.toString());
assertTrue(applicant.isValid());
kSession.insert(applicant);
kSession.fireAllRules();
System.out.printf(applicant.toString());
assertFalse(applicant.isValid());
输出:
[main] INFO org.drools.compiler.kie.builder.impl.ClasspathKieProject - Found kmodule: file:/Users/<MyUserName>/Drools/target/classes/META-INF/kmodule.xml
[main] WARN org.drools.compiler.kie.builder.impl.ClasspathKieProject - Unable to find pom.properties in /Users/<MyUserName>/Drools/target/classes
[main] INFO org.drools.compiler.kie.builder.impl.ClasspathKieProject - Recursed up folders, found and used pom.xml /Users/<MyUserName>/Drools/pom.xml
[main] INFO org.drools.compiler.kie.builder.impl.KieRepositoryImpl - KieModule was added:FileKieModule[ ReleaseId=drools:drools-test:6.2.0-SNAPSHOTfile=/Users/<MyUserName>/Drools/target/classes]
[main] WARN org.drools.compiler.kie.builder.impl.AbstractKieModule - No files found for KieBase HelloWorldKB, searching folder /Users/<MyUserName>/Drools/target/classes
Applicant{name='Mr John Smith', age=16, valid=true}
Applicant{name='Mr John Smith', age=16, valid=true}
申请人对象保持不变,而如果规则文件实际上是建立和加载应该已经成为继规则调用无效。警告消息不会出现由Drools的社会提供的git的测试项目...
我的POM使用相同的远程JBoss远程回购和6.2.0快照依赖...
我缺少什么?
(因为我在这里失去了我的头发,将额外+ 50/+ 100将被授予救世主,后回答验收)
(忽略的HelloWorld在图片)
如果该5.x的代码的“第二行”从类路径中的目录中的一个(但BLA通过此相对路径名查找“BLA/checkLicense.drl”/*不能*进行在类路径上),那么逻辑就会让getKieClasspathContainer()将*不*找到checkLicense.drl,因为这个方法被记录在类路径中找到DRL文件,显然你不提供任何额外的信息。 (我从来没有尝试过这种构建技术,所以我不能说这就是答案 - - 这只是我值得追求的。) – laune
我认为你正朝着正确的方向前进,你能告诉我怎么做它使用6.2.0?即使它是强力指向drl文件。 Thx请注意。 – Aubergine
那么,如果在类路径中包含'bla /'或将'checkLicense.drl'移动到类路径中的其中一个目录中,会发生什么?任何一个人都会立即显示我的猜测是否正确。 – laune