Представьте, что при выполнении процесса сборки вашего приложения вам необходимо обработать некоторые текстовые файлы. Например, в одном файле необходимо заменить некоторые сочетания символов (tokens) на другие, а в другой файл должно быть записано содержимое нескольких файлом, т.е. произведена конкатенация файлов. В этом случае необходимо использовать фильтры Ant. Фильтры используются для обработки содержимого файлов при их копировании, перемещении. Работать с фильтрами могут следующие команды (tasks):
<сoncat>
<copy>
<loadfile>
<loadproperties>
<move>
Фильтры могут объединяться в цепочки фильтров (FilterChains), таким образом позволяя применить к обрабатываемому файлу несколько фильтров в определенной последовательности. Такой механизм является аналогом Unix pipes.
Рассмотрим имеющиеся фильтры:
ClassConstants
Выводит все константы (поля, объявленные final) Java-класса. Модификатор доступа не влияет на вывод. Рассмотрим пример: вывод констант класса в текстовый файл.
Класс следующий:
TestClassConstants.java:
|
после этого создадим следующую структуру каталогов (PROJECT_HOME - корневой каталог проекта):
PROJECT_HOME/build/classes
PROJECT_HOME/src/ru/testant
В каталог PROJECT_HOME/src/ru/testant поместим наш файл TestClassConstants.java
Затем создадим следующий файл сборки
build.xml:
|
и поместим его в корневой каталог проекта (т.е. PROJECT_HOME). Основное внимание надо обратить на цель testcc. В ней происходит копирование обработанного контента из файла TestClassConstants.class в файл 11.txt, который будет размещен в PROJECT_HOME. Кодировка ISO-8859-1 должна использоваться в этом фильтре, т.к. при ее использовании не происходит потери информации при перекодировании characters --> int и обратно.
Фильтр ClassConstants использует библиотеку Apache BCEL (Byte Code Engineering Library), которую надо скачать с сайта http://jakarta.apache.org/bcel и поместить в каталог ANT_HOME/lib (где ANT_HOME - каталог, куда установлен ANT). Этот каталог не надо указывать в classpath, поскольку JARы из него добавляются в classpath автоматически перед началом работы Ant.
В итоге, наш проект включает в себя следующие файлы:
- PROJECT_HOME/build.xml
- PROJECT_HOME/src/ru/testant/TestClassConstants.java
- ANT_HOME/lib/bcel-5.2.jar
Затем вызывается цель testcc:
> ant testcc
Получившийся файл 11.txt имеет следующий вид:
11.txt:
A=1 |
Видно, что константа D не сохранена в файл, поскольку она не является примитивным типом, а также не сохранено неконстантное поле E.
Если фильтр применить внутри команды <loadproperties>, то тогда константы класса будут загружены в виде свойств, где имя константы - будет именем свойства, а значение константы - значением свойства. Пример:
|
Комментариев нет:
Отправить комментарий