Ant: Как узнать, скопировал ли хотя бы одно задание из десяти заданий на копирование? - PullRequest
0 голосов
/ 26 декабря 2010


У меня есть цель, которая имеет несколько задач копирования;Он в основном копирует общие файлы jar в наш набор приложений из централизованного местоположения в папку lib приложения.
Ввиду того, что это обычная задача копирования, jar будет скопирован, только если он новее, чем тот, который в настоящее времяв папке lib.
Это соответствующая часть в build.xml:

<target name="libs"/>  
  <copy file=... />  
  <copy file=... />  
  <copy file=... />  
  <antcall target="clean_compiled_classes"/>  
</target>  
<target name="clean_compiled_classes" if="anyOfTheLibsWereCopied">  
  <delete .../>  
</target>

Я ищу способ установить свойство anyOfTheLibsWereCopied перед вызовом муравья вlibs target в зависимости от того, был ли изменен какой-либо из файлов.

Спасибо,
Итай

1 Ответ

2 голосов
/ 26 декабря 2010

Я бы посоветовал взглянуть на задачу Uptodate .Я никогда не использовал его раньше, но, думаю, то, что вы пытаетесь сделать, будет реализовано по следующим направлениям:

<target name="libs"/>
  <uptodate property="isUpToDate">
    <srcfiles dir="${source.dir}" includes="**/*.jar"/>
    <globmapper from="${source.dir}/*.jar" to="${destination.dir}/*.jar"/>
  </uptodate>
  <!-- tasks below will only be executed if
       there were libs that needed an update -->
  <antcall target="copy_libs"/>  
  <antcall target="clean_compiled_classes"/>  
</target>

<target name="copy_libs" unless="isUpToDate">  
  <copy file=... />  
  <copy file=... />  
  <copy file=... />
</target>

<target name="clean_compiled_classes" unless="isUpToDate">  
  <delete .../>
</target>

Другой вариант - реализовать собственную задачу муравья, которая делает то, что вы хотите.Это потребует немного больше работы, хотя.

...