我基于this tutorial使用Drools和Java创建了一个简单的项目。它工作得非常好,所以我将其调整为自己想要的方式。我的DRL文件使用mvel方言(而不是Java方言),并且初始化在DRL文件中的规则“ initial”中进行。您可以看到该项目(源代码以及库和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(在TutorialsPoint网站上说过,http://download.jboss.org/drools/release/5.3.0.Final/中存在大量的JAR文件)。与我有关的还有一个问题:Integration of Drools (Expert System) with Android Projects

我将非常感谢您的帮助,提示或示例。

最好的祝福,
彼得

顺便说一句,我使用IntelliJ和Android Studio。

最佳答案

不要使用com.sample中的Java类和同一包中的DRL文件进行编译,并且声明语句与Java类矛盾。

根据您的问题,我假设您具有与在DRL中声明的类相同的副本,这与其他Java代码形成对比或有所不同。

只需忽略所有的声明语句并坚持使用Java类,或者保留声明并将Java类移至另一个包中。

顺便说一句:将您的班级字段设为私有。

10-07 17:01