2016-02-11 47 views
1

我使用DroolsCompilerAntTask爲Ant構建和構建Drools的無法Ant構建

rules: 
[compiler] Unable to resolve ObjectType 'Result' : [Rule name='Test'] 

時我提示以下錯誤:對於規則的文件我有

package rules 

import com.drools.info.*; 

dialect "java" 

rule "Test" 
    when 
     $r:Result(total == Result.ONE ) 
    then 
     System.out.println("Test Complete."); 
end 

在生成過程中解決對象類型.xml

<!-- rule --> 
<path id="drools.path" > 
    <fileset dir="${basedir}/libs"> 
     <include name="*.jar"/> 
    </fileset> 
    <pathelement location="${basedir}/build/rules" /> <- this is my path to compiled class files. If I exclude this line I got the above error. If I include this line then I got the (Access is denied) error. Either way is errored out. Are there permanent solution to this? 

</path> 

<path id="compile.classpath"> 
</path> 

<taskdef name="compiler" classname="org.drools.contrib.DroolsCompilerAntTask" classpathref="drools.path" /> 

    <target name="rules" > 
    <compiler 
     binformat="package" 
     srcdir="${basedir}/src/rules" 
     tofile="${basedir}/build" 
     classpathref="compile.classpath" > 
     <include name="*.drl" /> 
     <include name="*.brl" /> 
     <include name="*.xml" /> 
     <include name="*.dslr" /> 
    </compiler> 
    </target> 

其中Result是來自com.drool.info.Result的類對象 我認爲當我編譯規則時,我沒有添加類文件以及規則可能會導致這種情況?或者有沒有辦法告訴螞蟻規則編譯器的類文件是相關的?如果這是問題,我該如何解決它?

回答

0

編譯.drl文件與在幾個方面編譯Java文件類似。最重要的是,.drl中使用的所有類都必須與.drl位於同一個包中,否則它們必須導入。然而,導入僅僅解析名字空間 - 爲了獲得類的結構,類的.class文件必須是可用的。編譯器怎麼知道字段引用是什麼意思?

請確保包含它們的.class文件或.jar文件位於類路徑中。

+0

你能舉一個例子嗎?我的意思是如何在.rl中包含.class文件或者需要什麼 – logger

+0

taskdef中的classpath和classpathref怎麼樣?如果你使用的是螞蟻,你需要知道定義東西的屬性。 – laune

+0

我問的原因是因爲當我將類添加到路徑時,我得到了這個錯誤。 C:\ Users \ John \ workspacetools \ build.xml:65:RuleBaseTask失敗:C:\ Users \ John \ workspace \ build(訪問被拒絕) – logger