在进行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 。
这里缺少什么?
答案 0 :(得分:32)
如果您将AntContrib jar放在$ANT_HOME
/ lib目录中,那么您真正需要做的就是:
<taskdef resource="net/sf/antcontrib/antcontrib.properties"/>
实际上要使用<for/>
任务,您需要这样做:
<taskdef resource="net/sf/antcontrib/antlib.xml"/>
请注意,您必须使用antlib.xml
而不是antcontrib.properties
。请仔细阅读Installation directions。这很容易错过。
如果您在小组项目中这样做,我建议您将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>
答案 1 :(得分:2)
Ant需要了解依赖关系。以下是David 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"/>