Муравей проверяет наличие множества файлов - PullRequest
14 голосов
/ 12 марта 2011

В ant, как я могу проверить, существует ли набор файлов (список путей через запятую) или нет?

Например, мне нужно проверить, существуют ли все пути, перечисленные в myprop, и если да, я хочу установить свойство pathExist:

<property name="myprop" value="path1,path2,path3"/>

Таким образом, в примере все path1 path2 path3 должны существовать, чтобы установить pathExist в true, в противном случае false.

Я обнаружил, что для одного ресурса я могу использовать задачу resourceexist, но я не могу понять, как использовать это с разделенным запятыми списком путей.

Как я могу проверить существование набора путей? Спасибо!

Ответы [ 3 ]

12 голосов
/ 13 марта 2011

Для этого вы можете использовать комбинацию задач filelist, restrict и condition.

В приведенном ниже примере список файловсоздается из свойства со списком файлов через запятую.Используя restrict, найден список несуществующих файлов.Это помещается в свойство, которое будет пустым, если найдены все файлы.

<property name="myprop" value="path1,path2,path3"/>
<filelist id="my.files" dir="." files="${myprop}" />

<restrict id="missing.files">
  <filelist refid="my.files"/>
  <not>
    <exists/>
  </not>
</restrict>

<property name="missing.files" refid="missing.files" />
<condition property="pathExist" value="true" else="false">
    <length string="${missing.files}" length="0" />
</condition>
<echo message="Files all found: ${pathExist}" />

Вы можете использовать что-то вроде этого, чтобы сгенерировать сообщение об ошибке, в котором перечислены отсутствующие файлы:

<fail message="Missing files: ${missing.files}">
    <condition>
        <length string="${missing.files}" when="greater" length="0" />
    </condition>
</fail>
2 голосов
/ 13 марта 2011

Связанные условия - самое короткое решение для проверки наличия нескольких каталогов или файлов:

<condition property="pathExist">
 <and>
  <available file="/foo/bar" type="dir"/>
  <available file="/foo/baz" type="dir"/>
  <available file="path/to/foobar.txt"/>
  ...
 </and>
</condition>

Чтобы проверить список путей, разделенных запятыми, используйте Ant addon Flaka , например:1006 *

<project xmlns:fl="antlib:it.haefelinger.flaka">

 <!-- when you have a cvs property use split function
      to get your list to iterate over -->
 <property name="checkpath" value="/foo/bar,/foo/baz,/foo/bazz"/>
  <fl:for var="file" in="split('${checkpath}', ',')">
    <fl:fail message="#{file} does not exist !!" test="!file.tofile.exists"/>
  </fl:for>               
</project>

Другая возможность - это использование задачи условия сценария с языком сценариев jvm, таким как groovy, beanshell и т. Д.

1 голос
/ 21 ноября 2013

Эту проблему можно решить с помощью операций набора из Ant´s наборов ресурсов .Если вы вычисляете пересечение списка необходимых файлов со списком существующих файлов, оно не должно отличаться от списка необходимых файлов.Это показывает, как это сделать:

<property name="files" value="a.jar,b.jar,c.jar"/>

<target name="missing">
  <condition property="missing">
    <resourcecount when="ne" count="0">
      <difference id="missing">
        <intersect>
          <filelist id="required" dir="." files="${files}"/>
          <fileset id="existing" dir="." includes="*.jar"/>
        </intersect>
        <filelist refid="required"/>
      </difference>
    </resourcecount>
  </condition>
</target>

<target name="check" depends="missing" if="missing">
  <echo message="missing: ${toString:missing}"/>
</target>

Цель check сообщает о списке отсутствующих файлов, только если файл отсутствует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...