2015-12-04 4 views
0

Я пытаюсь выполнить задачу, которая должна выполнять итерацию по набору файлов. Для этого я использую задачу foreach от ant-contrib-0.3.jar. Проблема в том, что я пытаюсь передать (как параметр) цели, а не путь к файлу, но путь к файловому каталогу.<param> под <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> 

Запуск сценария я получаю следующее сообщение:

BUILD FAILED

C: \ Users \ rmrd001 \ мерзавец \ XSLT-рамки \ implementation \ xml \ ant \ text-odt-build.xml: 13: param не поддерживает вложенный элемент "набор файлов".

Я могу читать в нескольких местах в Интернете (например, axis.apache.org), что param может иметь вложенную fileset элемент.

+0

Рассматривали ли вы правописание правильно? – EJP

+0

@EJP вчера Английский не мой язык природы. Я полностью полагаюсь на проверку орфографии редактора. – Hairi

ответ

1

пример <foreach> связывания от проекта Apache Axis 1.x Ant tasks. Это другой номер <foreach>, отличный от проекта Ant-Contrib.

Как говорится в manouti, Ant-Contrib <foreach> не поддерживает вложенные элементы param. Вместо этого id<fileset> может быть передан в <target>, а может ссылаться на id.

Или, вы можете использовать Ant-Contrib-х <for> task (не "<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> 
1

См. http://ant-contrib.sourceforge.net/tasks/tasks/foreach.html для использования foreach. param должен быть атрибута не вложенный элемент:

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