2011-12-06 87 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文件。