Можно ли определить, что содержимое определенной папки изменилось, и когда это произойдет, запустить задачу ANT по требованию? - PullRequest
1 голос
/ 20 февраля 2011

В одном из моих проектов время сборки слишком велико. Мне удалось найти зависимости, но каждый раз, когда я выполняю сборку, мне нужно выполнить clean , который удаляет все файлы Java, а после этого javac перекомпилирует все. Это отнимает много времени.

Я использую ANT для сборки, и я думал; Можно ли выполнить clean (который удаляет файлы) по требованию? Для лучшего понимания я составил пример:

  • target top : сборка top.jar
  • target first : создает first.jar
  • target second : создает second.jar

top.jar зависит от first.jar и second.jar . Если я изменю какие-либо файлы, связанные с second.jar , ANT запустит цель second , и когда это повлияет на top.jar , ANT запустит top target. Пока все хорошо.

Но может случиться так, что я переименую класс в second.jar - например, с помощью eclipse - и получу два класса: старый и новый класс. Разные имена, но контент одинаковый. Это может быть проблемой, поэтому я должен постоянно запускать цель clean .

В приведенном выше примере у меня нет проблем с запуском чистой only для цели, которая изменилась.

Итак, мой вопрос: можно ли определить, что содержимое определенной папки изменилось, и когда это произойдет, запустить задачу ANT по требованию?

Я оглянулся и обнаружил задание ANT с почти той же функциональностью, что и мне. Он называется зависит . К сожалению, он не выполняет полное удаление.

Ответы [ 4 ]

0 голосов
/ 22 февраля 2011

Я мог бы найти решение своей проблемы.Я собираюсь использовать задачу outofdate из ant contrib :

<outofdate>
  <sourcefiles path="src3"/>
  <targetfiles path="target/second.jar"/>
  <sequential>
    <delete includeemptydirs="true">
      <fileset dir="bin3" includes="**/*"/>
    </delete>
    <delete file="target/second.jar"/>
  </sequential>
</outofdate>
<javac .../>
0 голосов
/ 20 февраля 2011

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

Кроме того, можно определить пользовательские компоновщики (например, задачу муравья), которые выполняются до или после. Это позволит вам автоматически обновлять файлы JAR, используя файлы классов, сгенерированные Eclipse из директории bin проекта.

0 голосов
/ 20 февраля 2011

В Ant есть задача <depend> , которая может делать то, что вы хотите.

0 голосов
/ 20 февраля 2011

Может libnotify привязки для Java быть полезным? Если вам не нужно запускать это в Java, проверьте inotify , Kqueue или тому подобное.

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