2011-12-06 91 views
1

我有一個Android構建腳本。它嘗試使用Gant任務而不是Ant目標來完成項目上的自定義工作。有趣的構建腳本的一部分看上去方式如下:從Ant腳本中運行Gant任務時出現NoClassDefFoundError

<taskdef name="gant" classname="org.codehaus.gant.ant.Gant"> 
    <classpath> 
     <pathelement location="${gant.dir}/gant-1.9.7_groovy-1.8.4.jar" /> 
    </classpath> 
</taskdef> 

<target name="-pre-build"> 
    <gant target="targetA"/> 
    <gant target="targetB"/> 
    <gant target="targetC"/> 
    <gant target="targetD"/> 
    <gant target="targetE"/> 
</target> 

<target name="-pre-compile"> 
    <gant target="targetF"/> 
</target> 


我build.gant文件肯定有這些目標,但使用了Ant構建腳本時,我得到:

(...)\build.xml:55: java.lang.NoClassDefFoundError: groovy/util/AntBuilder 

儘快螞蟻命中行:

<gant target="targetA"/> 


我用從Windows安裝程序文件和Eclipse太陽神與Ant視圖安裝Gant的Groovy的1.8.4。 Gant.dir屬性有一個有效的路徑,所以情況並非如此。看起來Groovy無法在build.gant文件中找到目標,即使它們存在。我甚至試圖用完全路徑使用Gant任務來提供build.gant文件,但沒有成功。從控制檯運行Ant腳本時會發生同樣的情況。 Build.gant文件在Ant腳本中可見。

有什麼辦法解決這個問題嗎?

回答

0

因此,這對build.gant中的不可見目標沒有問題,而是在taskdef的類路徑中缺少庫。以下修復我的問題:

<path id="gant.libs"> 
    <fileset dir="${gant.libs.dir}" includes="**/*.jar"/> 
</path> 

<taskdef name="gant" classname="org.codehaus.gant.ant.Gant"> 
    <classpath refid="gant.libs"/> 
</taskdef> 

<target name="-pre-build"> 
    <gant target="targetA"/> 
    <gant target="targetB"/> 
    <gant target="targetC"/> 
    <gant target="targetD"/> 
    <gant target="targetE"/> 
</target> 

<target name="-pre-compile"> 
    <gant target="targetF"/> 
</target> 

其中gant.libs.dir是指含有gant_groovy1.8-1.9.7.jar和Groovy的全1.8.4.jar從甘特1.9.7二進制獨立的目錄安裝zip文件。