从Ant脚本中运行Gant任务时出现NoClassDefFoundError

时间:2011-12-06 15:36:33

标签: android ant task noclassdeffounderror gant

我有一个Android构建脚本。它尝试使用Gant任务而不是Ant目标来完成项目上的自定义工作。有趣的构建脚本的部分看起来如下:

<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

一旦Ant命中行:

    <gant target="targetA"/>


我使用Groovy 1.8.4和从Windows安装程序文件安装的Gant和带有Ant视图的Eclipse Helios。 Gant.dir属性具有有效路径,因此情况并非如此。看起来Groovy在build.gant文件中找不到目标,即使它们存在。我甚至尝试使用Gant任务,提供了build.gant文件的完整路径,但没有成功。从控制台运行Ant脚本时会发生同样的事情。 Build.gant文件在Ant脚本中可见。

有什么方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分: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 1.9.7二进制独立安装zip文件中的gant_groovy1.8-1.9.7.jar和groovy-all-1.8.4.jar的目录。