четверг, 24 ноября 2011 г.

Как начать работать с Ant




Введение


За последнюю неделю у меня два раза попросили рассказать об Ant. Решил, по этому поводу, написать несколько строчек для начинающих пользователей Ant и для тех, кто не знает, что это такое, но интересуется возможностями применения.

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

По сути своей работы Ant аналогичен известному средству обработки сценариев make. Обычно, многие программисты, работающие с Си/Си++ знакомы с make не понаслышке. Особенно это относится к программистам, которые работают в *nix. Однако make исполняет сценарии зависимые от платформы, или, если быть более точным, от командного процессора для которого они написаны.


Как работает Ant


Ant исполняет сценарии, которые, по умолчанию, располагаются в файле с названием build.xml. Как видно из расширения файла, его содержимое представлено в формате XML.

Корневым тегом документа является тег project. Проект состоит из целей - теги target, а цели состоят из задач. Задач для Ant определено несколько десятков. Каждая задача представлена своим тегом.

Вообще, синтаксис файла сценария для Ant достаточно прост и интуитивно понятен. Особенно, если знать основы его структуры.

Рассмотрим это на примере простого сценария. Приведем возможный вариант файла build.xml.

<project name='test' default='release' >

    <target name='spec' >
        <echo message='Target: spec' >
    </target> 

    <target name='release' >
        <echo message='Target: release' >
    </target> 

    <target name='debug' depends='spec' >
        <echo message='Target: debug' >
    </target> 

</project>  

Прокомментируем представленный вариант сценария.

Описывается проект с именем test, в котором целью по умолчанию объявляется цель release. Т.е., если запустить Ant без специального указания исполняемой цели, то, согласно этому сценарию, будет выполнена цель release.

Кроме цели release представлены еще цели debug и spec, причем, исполнение цели debug зависит от исполнения цели spec. Значит, если заказать исполнение цели debug, то сначала выполнится цель spec, и только в случае ее успешного исполнения будет выполнена цель debug.

Во всех трех представленных целях выполняется одна простейшая задача echo, которая выводит в стандартный выходной поток (в нашем случае, в консоль) сообщение заданное атрибутом message.

Теперь остановимся на исполнении этого сценария. В системе Ant, наверное, главной утилитой является утилита ant, которая и призвана исполнять сценарии. Давайте зайдем в командную строку и в директории, где расположен нужный нам файл build.xml выполним следующую команду.

$ ant

(символ $ означает стандартное приглашение пользователя в системах *nix, поэтому его вводить не надо. Для DOS/Windows это будет символ > )

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

$ ant
Target: release

Чтобы выполнить цель debug нашего сценария, необходимо выполнить ant с аргументом debug.

$ ant debug
Target: spec
Target: debug

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

Для ленивых я предложу несколько готовых ссылок (которые, разумеется, могут в любой момент устареть).
http://ant.apache.org/ - Официальный сайт системы Ant.
http://ant.apache.org/manual/index.html - Главная страница официальной документации по системе Ant. Для просмотра всего списка задач выберите раздел Ant Tasks -> List of Tasks.


Установка Ant


Если вы работаете в Linux, то проблемы с установкой Ant у вас не будет. Разумеется, при условии, что вы умеете пользоваться своим Linux. Обычно, все что нужно сделать это обратиться к своему установщику с просьбой установки Ant, и, после завершения его работы, можно будет сразу приступать к использованию Ant. Здесь проблем возникнуть не должно. Хотя, конечно могут быть и кривые дистрибутивы и кривые руки и даже кривые ноги, но стандартной рекомендации в этом случае дать не получится - разбирайтесь с /dev/head.

Я хочу остановиться подробнее на установке Ant под Windows, так как именно там не все так просто для новичков.

Сложность в том, что разработчики Ant не предоставляют к системе Windows специального native-инсталлятора, который бы решил все проблемы.

Скачайте нужную вам версию Ant с cайта разработчика. Если ссылка не устареет, то попробуйте сделать это со страницы http://ant.apache.org/bindownload.cgi. Скачайте более привычный для пользователей DOS/Windows архив с компрессией zip. Скачайте и распакуйте его средствами, которые вам доступны в вашей системе. Для эксперимента с Ant под Windows я скачал архив apache-ant-1.8.2-bin.zip.

Если вы хотите получить информацию об установке Ant во всех подробностях из первоисточника, то надо опять обратиться к соответствующему разделу сайта производителя Ant. На момент написания этих строк можно было воспользоваться адресом http://ant.apache.org/manual/index.html. На указанной странице нужно выбрать Installing Apache Ant -> Installing Ant.

Суть действий, которые там описаны я кратко изложу ниже.


Во-первых.

Назовём корневой директорией Ant директорию, в которой вы найдете поддиректории bin, lib, docs, etc и прочие объекты файловой системы, относящиеся к системе Ant.

Создайте системную переменную ANT_HOME и установите ее в значение корневой директории Ant.

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

Во-вторых.


Для работы Ant требуется Java. Причем, если мы хотим собирать средствами Ant проекты Java (а, как правило, именно для этого мы и ставим Ant), то нам нужен именно пакет JDK, содержащий средства компиляции, а не JRE, где содержатся только средства исполнения байт-кода Java.

Следовательно, в вашей системе, нужно иметь установленным JDK. Если у вас JDK не установлено, то скачайте и установите его. С этим, как правило, проблем не возникает.

Теперь нам следует сообщить системе Ant о расположении установленного в системе JDK. Для этого, следует установить системную переменную JAVA_HOME в значение директории, где лежит установленное JDK.

Также, имеет смысл добавить в список системных путей поддиректорию bin корневой директории JDK. Это упростит вам самим использование предоставляемых утилит JDK. 

В-третьих.

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

ВАЖНО!!! При установке значений ANT_HOME и JAVA_HOME следите за тем, чтобы ни одно из значений не заканчивалось на символ разделителя директорий - "\" (DOS\Windows) или "/" (POSIX).

Для тех кто не знает как устанавливать системные переменные и расширять список системных путей (системная переменная PATH) подскажу, что в Windows их можно установить из панели управления. Для Windows XP, в классическом размещении инструментов панели, установку системных переменных надо искать в последовательности выбора "Панель управления -> Система -> Дополнительно -> Переменные среды -> Создать|Изменить Системные переменные".

Если верить докуменации Ant, то часть этой работы должен выполнить скрипт ant.bat из поддиректории bin корневой директории Ant. Я не пробовал.

Итак, в моем Windows XP были установлены следующие значения указанных переменных.

JAVA_HOME=C:\Program Files\Java\jdk1.7.0_01
ANT_HOME=C:\apache-ant-1.8.2
PATH=<прежний список путей>;C:\Program Files\Java\jdk1.7.0_01\bin;C:\apache-ant-1.8.2\bin

Чтобы проверить значение установленных переменных, следует открыть консоль Windows (Пуск->Выполнить->cmd) и исполнить команду echo передав ей значение системной переменной. Напомню, что если переменная называется xyz, то обратиться к ее значению в DOS\Windows можно взяв ее в знаки процента, т.е. написав %xyz% (В оригинальном *nix чуть проще - $xyz). Итак, посмотрим:

> echo %JAVA_HOME%
C:\Program Files\Java\jdk1.7.0_01

> echo %ANT_HOME%
C:\apache-ant-1.8.2

> echo %PATH%
<длинный список путей>;C:\Program Files\Java\jdk1.7.0_01\bin;C:\apache-ant-1.8.2\bin

> echo %CLASSPATH%
<должно быть пусто>

Комментариев нет: