Tricky Ant набор файлов (включая большинство, но не весь каталог)

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

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

1) Все файлы под классами,

2) Но не те, которые находятся под /com/foo/bar

3) Кроме того, я хочу /com/foo/bar/AbstractCustomerAdapter.class и CustomerAdapterFactory.class.

В файлах под /com/foo/bar обычно называются такие вещи, как FooCustomerAdapter.class.

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

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

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

Ответ 1

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

<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>

Ответ 2

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

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

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

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

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

Ответ 3

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