16

我在进行 ant build 时得到关注:

Build\build.xml:247: Problem: failed to create task or type
for
Cause: The name is undefined.
Action: Check the spelling.
Action: Check that any custom tasks/types have been declared.
Action: Check that any <presetdef>/<macrodef> declarations have taken place.

build.xml 第 247 行是<for param="file">

已经定义<taskdef resource="net/sf/antcontrib/antcontrib.properties"/>了,没用。然后我特别添加了以下内容,但它仍然无法正常工作。

<taskdef resource="net/sf/antcontrib/antcontrib.properties">
        <classpath>
            <pathelement location="${env.ANT_HOME}/lib/ant-contrib-1.0b3.jar"/>
        </classpath>
    </taskdef>

我在C:\Softwares\apache-ant-1.8.4\lib目录中有ant-contrib-1.0b3.jar 。这里缺少什么?

4

2 回答 2

38

如果您将 AntContrib jar 放在$ANT_HOME/lib 目录中,您真正需要做的就是:

<taskdef resource="net/sf/antcontrib/antcontrib.properties"/>

实际上要使用该<for/>任务,您需要这样做:

<taskdef resource="net/sf/antcontrib/antlib.xml"/>

请注意,您必须使用antlib.xml而不是antcontrib.properties. 仔细阅读安装说明。很容易错过。

如果你在一个小组项目中这样做,我建议你把你的 ant-contrib.jar 放在你的项目中。然后将它们添加到版本控制系统中的项目中。这样,其他开发人员可以将您的构建与 ant-contrib 任务一起使用,而无需自己下载 ant-contrib jar 并将其安装在他们的 $ANT_HOME 目录中。

假设您创建了一个名为的目录ant-contrib.dir并将其放在项目的根目录中,然后将 ant-contrib jar 放在该文件夹中。只需将其放入您的项目中:

<taskdef resource="net/sf/antcontrib/antlib.xml">
    <classpath>
          <fileset dir="${basedir}/ant-contrib.dir"/>
    </classpath>
</taskdef>
于 2012-09-13T14:54:41.910 回答
2

Ant 需要了解依赖关系。以下是大卫 W 答案的更简洁版本。将以下等效项添加到您的 ant 项目中:

<taskdef resource="net/sf/antcontrib/antcontrib.properties" classpath="relative/path/to/ant-contrib-1.0b3.jar"/>
<taskdef resource="net/sf/antcontrib/antlib.xml" classpath="relative/path/to/ant-contrib-1.0b3.jar"/>
于 2016-11-23T14:25:57.970 回答