從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