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



我正在尝试执行一项任务,该任务应该迭代一组文件。为此,我使用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不支持嵌套的"fileset"元素。

我可以在互联网上的几个地方(比如axis.apache.org)看到param可以有一个嵌套的fileset元素。

链接到的<foreach>示例来自ApacheAxis1.xAnt任务项目。这是一个不同于Ant-Contrib项目的<foreach>

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

或者,您可以使用Ant Contrib的<for>任务(而不是"<foreach>"),它可以调用<macrodef>。。。

<target name="copy-all-unzipped">
    <for param="file">
        <path>
            <fileset dir="${path.unzipped}">
                <include name="**/content.xml"/>
            </fileset>
        </path>
        <sequential>
            <copy-unzipped file-path="@{file}"/>
        </sequential>
    </for>
</target>
<macrodef name="copy-unzipped">
    <attribute name="file-path"/>
    <sequential>
        <echo>@{file-path}</echo>
    </sequential>
</macrodef>

请参阅http://ant-contrib.sourceforge.net/tasks/tasks/foreach.html了解如何使用CCD_ 16。param必须是属性而不是嵌套元素:

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

编辑:

由于嵌套的fileset元素已被弃用,您可以将其替换为path元素(我已经很久没有尝试过了,因为我使用Ant…):

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

相关内容

  • 没有找到相关文章

最新更新