ANT: копировать содержимое нескольких наборов файлов с одинаковыми файлами в порядке приоритета - PullRequest
3 голосов
/ 23 марта 2009

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

У нас есть отдельные ant-скрипты, которые создают WAR-файл. Эта сборка предназначена для замены любых измененных классов во время разработки. Так что эта сборка должна быть быстрой.

Например, мои два местоположения класса:

  • / бен
  • / сборки / классы

Я хочу, чтобы классы из этих каталогов были скопированы в: / Веб / WEB-INF / классы

Однако, если оба эти местоположения содержат один и тот же файл класса, например:

  • / бен / ком / бен / Test.class
  • / сборки / классы / ком / бен / Test.class

Я хочу, чтобы файлы в / bin всегда имели приоритет.

Так в примере:

  • файл: /bin/com/ben/Test.class будет скопирован.
  • файл: /build/classes/com/ben/Test.class будет игнорироваться.

Мой текущий скрипт выглядит так:

<sync todir="${deploy}/WEB-INF/classes" verbose="true">
    <fileset dir="bin"/>
    <fileset dir="build/classes"/>
</sync>

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

Любая помощь будет принята.

Ответы [ 2 ]

3 голосов
/ 23 марта 2009

Под удаляемыми висящими файлами вы подразумеваете файлы, которые уже находятся в вашем каталоге "$ {deploy} / WEB-INF / classes"?

Синхронизация удалит существующие файлы в целевом каталоге, если вы не хотите, чтобы это происходило, я бы рекомендовал вместо этого использовать копию.

Что касается папки с более высоким приоритетом, вы можете просто скопировать несколько раз и перезаписать существующие файлы.

  <copy todir="${deploy}/WEB-INF/classes" verbose="true">
    <fileset dir="build/classes"/>
  </copy>

  <copy todir="${deploy}/WEB-INF/classes" verbose="true"  overwrite="true">
    <fileset dir="bin"/>
  </copy>

Теперь test.class будет скопирован из build / classes, а затем перезаписан test.class из bin.

1 голос
/ 23 марта 2009

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

<war [...] duplicate="preserve">
    [...]
    <classes dir="bin"/>
    <classes dir="build/classes"/>
</war>
...