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, которые вам нужно решить.