Tricky Ant fileset (включает большинство, но не весь каталог) - PullRequest
23 голосов
/ 19 июня 2009

У меня есть случай, когда я просто не могу понять, как заставить Ant извлекать только те файлы, которые мне нужны, в наборе файлов (с какой стати люди Ant просто не используют регулярные выражения?).

Вот ситуация. У меня есть куча классов в каталоге классов. Я хочу:

1) Все файлы в классах,

2) Но не те, что в / com / foo / bar

3) За исключением того, что я хочу /com/foo/bar/AbstractCustomerAdapter.class и CustomerAdapterFactory.class.

Файлы в / com / foo / bar обычно называются такими вещами, как FooCustomerAdapter.class.

В двух словах, мы создаем 2 банки, один из которых предназначен только для конкретных пользователей, а другой - для всего остального. Это позволяет нам создавать новый клиентский адаптер и заменять только этот мини-сосуд. Приведенный выше набор файлов, который убивает меня, - это «все остальное».

Как только Ant исключит файл, no include не вернет его, поэтому пункты 2 и 3 дают мне душевную боль по поводу того, как сделать набор файлов. Как я могу исключить все свои клиентские адаптеры, но не абстрактный клиентский адаптер? Для исключения классов XZYCustomerAdapter, не исключая AbstractCustomerAdapter, я не могу использовать совместимые с муравьями подстановочные знаки.

Ну, по крайней мере, я не могу понять один, но, надеюсь, один из вас обитателей Stack Overflow умнее меня:)

Ответы [ 3 ]

45 голосов
/ 19 июня 2009

Большинство задач, которые принимают один набор файлов, также могут принимать несколько наборов файлов.

<jar file="...">
  <fileset dir="classes">
    <exclude name="com/foo/bar/**"/>
  </fileset>

  <fileset dir="classes">
    <include name="com/foo/bar/AbstractCustomerAdapter.class"/>
    <include name="com/foo/bar/CustomerAdapterFactory.class"/>
  </fileset>
</jar>
1 голос
/ 19 июня 2009

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

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

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

<tarfileset dir="classes" includes="classes" excludes="classes/com/foo/bar" /><br> <tarfileset dir="classes" includes="classes/com/foo/bar/AbstractCustomerAdapter.class,classes/com/foo/bar/CustomerAdapterFactory.class" />

Если файлы Jar не сконструированы как файлы tar и zip, вам может понадобиться явно построить файловую иерархию, как я это делаю с fixcrlf, и создать файл jar за второй проход из исправленной иерархии.

0 голосов
/ 19 июня 2009

Запишите пользовательский селектор . API прост в реализации. Там у вас есть все возможности Java, которые вам нужно решить.

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