<foreach>下的<param />不支持嵌套文件集元素

时间:2015-12-04 15:40:24

标签: java ant ant-contrib

我正在尝试执行一个应该迭代一组文件的任务。为此,我使用 ant-contrib-0.3.jar 中的foreach任务。问题是我试图将(作为参数)传递给目标而不是文件路径,而是文件目录路径。

这是项目:

<project basedir="../../../" name="do-report" default="copy-all-unzipped">
    <xmlproperty keeproot="false" file="implementation/xml/ant/text-odt-properties.xml"/>
    <!--    -->
    <taskdef resource="net/sf/antcontrib/antcontrib.properties">
        <classpath>
            <pathelement location="${path.infrastructure}/apache-ant-1.9.6/lib/ant-contrib-0.3.jar"/>
        </classpath>
    </taskdef>
    <!--    -->
    <target name="copy-all-unzipped">
        <foreach target="copy-unzipped">
            <param name="file-path">
                <fileset dir="${path.unzipped}">
                    <include name="**/content.xml"/>
                </fileset>
            </param>
        </foreach>
    </target>
    <!--    -->
    <target name="copy-unzipped">
        <echo>${file-path}</echo>
    </target>
</project>

运行脚本我收到以下消息:

  

建立失败

     

C:\ Users \ rmrd001 \ git \ xslt-framework \ implementation \ xml \ ant \ text-odt-build.xml:13:param不支持嵌套的&#34;文件集&#34;元件。

我可以在互联网上的几个地方(例如axis.apache.org)阅读param可以拥有嵌套的fileset元素。

2 个答案:

答案 0 :(得分:1)

有关foreach的使用方法,请参阅http://ant-contrib.sourceforge.net/tasks/tasks/foreach.htmlparam必须是属性,而不是嵌套元素:

<target name="copy-all-unzipped">
    <foreach target="copy-unzipped" param="file-path">
        <fileset dir="${path.unzipped}">
            <include name="**/content.xml"/>
        </fileset>
    </foreach>
</target>

答案 1 :(得分:1)

您链接到的<foreach>示例来自Apache Axis 1.x Ant tasks项目。这与Ant-Contrib项目中的<foreach>不同{。}}。

正如manouti所说,Ant-Contrib <foreach>不支持嵌套的param元素。相反,id的{​​{1}}可以传递给<fileset><target>可以引用<target>

或者,您可以使用Ant-Contrib的<for> task(不是&#34; id&#34;),可以调用<macrodef> ...

<foreach>