【问题标题】:Apache ant does not recognize 'for' task/macro, although I have added ant-contrib via taskdefApache ant 无法识别“for”任务/宏,尽管我通过 taskdef 添加了 ant-contrib
【发布时间】:2016-11-23 22:25:57
【问题描述】:

我在进行 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 行是 &lt;for param="file"&gt;

已经定义了&lt;taskdef resource="net/sf/antcontrib/antcontrib.properties"/&gt;,它不起作用。然后我专门添加了以下,但它仍然无法正常工作。

<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
这里缺少什么?

【问题讨论】:

    标签: ant build


    【解决方案1】:

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

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

    实际上要使用&lt;for/&gt;任务,你需要这样做:

    <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>
    

    【讨论】:

    • 您也可以将 ant-contrib 添加为 Maven 依赖项,使用 ant-contribant-contrib20020829 version> 其他人在运行maven的时候会拿到jar。
    • 将 ant-contrib jar 放入项目的全部目的是为了使其易于构建。想象一下,我定义了一个标准的开发环境:您需要 VCS、Java 和 Ant。签出这个项目的人不需要做任何事情来让它工作,即使它需要 ant-contrib。它是自给自足的。我结帐并构建。使用 Maven,我现在必须安装 Maven,然后运行 ​​Maven,然后才能运行 Ant。
    【解决方案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"/>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-04
      • 2013-06-19
      • 2013-09-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多