我正在尝试执行一个应该迭代一组文件的任务。为此,我使用 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
元素。
答案 0 :(得分:1)
有关foreach
的使用方法,请参阅http://ant-contrib.sourceforge.net/tasks/tasks/foreach.html。 param
必须是属性,而不是嵌套元素:
<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>