【发布时间】:2016-12-12 21:14:12
【问题描述】:
我基于this tutorial 使用 Drools 和 Java 创建了一个简单的项目。它工作得很好,所以我把它改编成我想做的事。我的 DRL 文件使用 mvel 方言(而不是 Java 方言),并且在 DRL 文件内的“初始”规则中进行初始化。你可以看到这个项目(源代码以及库和 DRL 文件)here。我的 DRL 文件看起来不像以下内容:
package omd
dialect "mvel"
declare ocenaKwalifikacji
value : Double
end
declare ocenaKandydata
value : Double
end
declare ocenaTestow
value : Double
end
declare ocenaRozmowy
value : Double
end
rule "ocenakandydata/1 "
when
$ocenaRozmowy : ocenaRozmowy(value==5.0000)
$ocenaKwalifikacji : ocenaKwalifikacji(value==5.0000)
$ocenaTestow : ocenaTestow(value==5.0000)
then
insert(new ocenaKandydata (5.0000))
System.out.println("ocenaKandydata setting to 5.0000)");
end
rule "ocenakandydata/2 "
when
$ocenaRozmowy : ocenaRozmowy(value==5.0000)
$ocenaKwalifikacji : ocenaKwalifikacji(value==4.0000)
$ocenaTestow : ocenaTestow(value==5.0000)
then
insert(new ocenaKandydata (5.0000))
System.out.println("ocenaKandydata setting to 5.0000)");
end
...
rule "ocenakandydata/64 "
when
$ocenaRozmowy : ocenaRozmowy(value==2.0000)
$ocenaKwalifikacji : ocenaKwalifikacji(value==2.0000)
$ocenaTestow : ocenaTestow(value==2.0000)
then
insert(new ocenaKandydata (2.0000))
System.out.println("ocenaKandydata setting to 2.0000)");
end
rule "initial"
when
then
/*DATA*/
insert(new ocenaKwalifikacji(5.0));
insert(new ocenaRozmowy(2.0));
insert(new ocenaTestow(2.0));
end
一切正常,但第一行中的包必须是omd,尽管所有类都在com.sample 包中。当我将包名更改为com.sample时,出现以下错误:
Error creating field accessors for TypeDeclaration 'ocenaKandydata' for type 'ocenaKandydata'.
现在有所有的乐趣......
我为 Android 创建了类似的项目。我使用了相同的代码,但库来自another example(之前的库确实将类放在 java.* 或 javax.* 包中,这在为 Android 编程时是不允许的)。你可以看到这个项目here。我将psc-zatrudnienie-ocena_kandydata.drl 文件放在/storage/emulated/0/drools/psc-zatrudnienie-ocena_kandydata.drl 下的智能手机存储中。当DRL文件中的包为pl.me.drools2tp时(与Android应用程序中所有类的放置相同),我得到以下错误(类似于上面的错误):
Error creating field accessors for TypeDeclaration 'ocenaKwalifikacji' for type 'ocenaKwalifikacji'
Error creating field accessors for TypeDeclaration 'ocenaKandydata' for type 'ocenaKandydata'
Error creating field accessors for TypeDeclaration 'ocenaTestow' for type 'ocenaTestow'
Error creating field accessors for TypeDeclaration 'ocenaRozmowy' for type 'ocenaRozmowy'
当我将 DRL 文件中的包名更改为另一个时,错误如下:
Class 'ocenaKwalifikacji' not found for type declaration of 'ocenaKwalifikacji'
Class 'ocenaKandydata' not found for type declaration of 'ocenaKandydata'
Class 'ocenaTestow' not found for type declaration of 'ocenaTestow'
Class 'ocenaRozmowy' not found for type declaration of 'ocenaRozmowy'
有人可以给我一些建议吗? “TypeDeclaration 的字段访问器”到底是什么意思? DRL 文件的declare 部分中提到的所有类也在Java 中定义,具有value 字段以及getter 和setter。 dekstop 版本使用 Drools 5.3.0(有大量来自 http://download.jboss.org/drools/release/5.3.0.Final/ 的 JAR 文件,正如在 TutorialsPoint 网站上所说的那样)。还有一个与我有关的问题:Integration of Drools (Expert System) with Android Projects
我将非常感谢您提供一些帮助、提示或示例。
最好的问候, 彼得。
顺便说一句,我使用 IntelliJ 和 Android Studio。
【问题讨论】: