вторник, 1 декабря 2009 г.

Apache Ant сборка без проблем

О работоспособности муравья сложено не мало сказок и басен… но в данной статье речь пойдет о Apache Ant – не менее работоспособной и гибкой утилиты для сборки проектов.




Все кто сталкивался с процессом сборки проектов на java, без использования IDE, знают насколько это трудоемкий и не удобный процесс, а особенно если приходится проводить эти сборки часто. К счастью есть одно замечательное средство от это болезни – это Apache Ant java утилита для сборки, и не только, проектов.
Необходимые инструменты
И так для работы нам понадобится:
jdk-1.5 (или выше)
Ant 1.6.5
Так как Apache Ant, является java приложением то для его работы требуется JVM, процесс установки которой я описал в своей статье Установка и настройка java.
Все необходимые дистрибутивы Apache Ant можно скачать с сайта - http://ant.apache.org/bindownload.cgi


Установка Ant
После распаковывания архива с дистрибутивом Ant получаем следующую структуру каталогов
ant
   +--- bin  // содержит крипты запуска
   |
   +--- lib  // содержит Ant jars плюс необходимые ресурсы
   |
   +--- docs // содержит документацию
   |      +--- ant2    // краткое описание ant2
   |      |
   |      +--- images  // для html документации
   |      |
   |      +--- manual  // Ant документация (читать всем ;-)
   |
   +--- etc // содержит xsl чтобы:
            //   - создания различных отчетов xml (выход. задач).
            //   - переброски ваших build файлов и вывода предупреждающих сообщений
            //   - ... и многое другое ;-)

Теперь процесс установки будет зависить от ОС на которой будет работа ant.

Windows and OS/2
Подразумеваем что Ant установлен (распакован) по адресу c:\ant\. Следующем шагом устанавливаем переменные окружения:


set ANT_HOME=c:\ant
set JAVA_HOME=c:\jdk1.2.2
set PATH=%PATH%;%ANT_HOME%\bin

Unix/Linux
Подразумеваем что Ant установлен (распакован) по адресу /usr/local/ant. Следующем шагом устанавливаем переменные окружения:

export ANT_HOME=/usr/local/ant
export JAVA_HOME=/usr/local/jdk-1.2.2
export PATH=${PATH}:${ANT_HOME}/bin
или
setenv ANT_HOME /usr/local/ant
setenv JAVA_HOME /usr/local/jdk-1.2.2
set path=( $path $ANT_HOME/bin )
Если JAVA_HOME у вас уже установлен и указывает на нужную JDK, то тогда не трогаем эту переменную.
На этом в принципе процесс установки заканчиваться. Теперь чтобы проверить, что все работает, в консоли выполните следующую команду :
> ant -version
Результатом должно быть следующая строка:
Apache Ant version 1.6.5 compiled on June 2 2005
Версия и дата могут отличатся.

Написание простого build фала
Build файлы для Ant имеют xml структуру. Каждый build файл, должен содержать по крайней мере один проект, который описывается секцией project и должен содержать по крайней мере одно «здание» (task).
секция project имеет три атрибута:
атрибут
Описание
Обязательный
name
Имя проекта.
нет
default
Цель (target), которая должна быть выполнена по умолчанию.
нет; с версии 1.6 все build файлы должна содержать одну задачу которая включает в себя вызовы остальных подзадач и реализует логику сборки.
basedir
Базовая директория проекта в которой происходи сборка.
нет
Секция target - описывает шаги поведения сборщика Ant например: процесс компиляции, сборки дистрибутива или развертывания на сервере приложений и тд.
Секция target имеет следующие атрибуты:

Attribute
Description
Required
name
Имя цели.
Yes
depends
Список имен «целей», разделенных запятыми, которые должны быть выполнены прежде выполнения данной задачи.
No
if
Имя свойства, которое должно быть заданно перед выполнением данной цели. Если свойство не заданно (не имеет значения) то цель не выполняется.
No
unless
Имя свойства, которое не должно быть заданно перед выполнением данной цели. Если свойство заданно (имеет значения) то цель не выполняется.
No
description
Короткое описание цели.
No
Tasks
task это часть кода который может быть выполнен.
task может иметь множество атрибутов (или аргументов как вы предпочитаете).Значения этих атрибутов могут быть ссылки на параметры (property).
Структура таска:
<name attribute1="value1" attribute2="value2" ... />
Properties – свойства (параметры)
Секция проекта модет иметь свойства Properties – это своего рода переменные, которые хранят значения необходимы для сборки, например: имя директории с исходными файлами, путь для скомпилированных кодов и тд.
Например:
<property name="service.name" value="SimpleService" />
Пример build файла
Ниже будет представлен простой пример build файла который позволяет откомпилировать java проект и собрать его дистрибутив в виде jar файла.
<project name="MyProject" default="dist" basedir=".">
    <description>
        simple example build file
    </description>
  <!-- Устанавливаем глобальные properties для этой сборки -->
  <property name="src" location="src"/>
  <property name="build" location="build"/>
  <property name="dist"  location="dist"/>
 
  <target name="init">
    <!-- Создадим штамп времени -->
    <tstamp/>
    <!-- Создадим build директория используемую для компиляции -->
    <mkdir dir="${build}"/>
  </target>
 
  <target name="compile" depends="init"
        description="compile the source " >
    <!-- Компилирует java код из ${src} в ${build} -->
    <javac srcdir="${src}" destdir="${build}"/>
  </target>
 
  <target name="dist" depends="compile"
        description="generate the distribution" >
    <!-- Создает директорию для дистрибуции -->
    <mkdir dir="${dist}/lib"/>
 
    <!-- Добавить все из ${build} в MyProject-${DSTAMP}.jar файл -->
    <jar jarfile="${dist}/lib/MyProject-${DSTAMP}.jar" basedir="${build}"/>
  </target>
 
  <target name="clean"
        description="clean up" >
    <!-- Удаляем ${build} и ${dist} деревья директориев -->
    <delete dir="${build}"/>
    <delete dir="${dist}"/>
  </target>
</project>
Листинг - build.xml.
Если пошагово описать процесс сборки, то это буде выглядить так:
  1. Указываем сборщику что имеем проект «MyProject» с текущей директорией из корня проекта (те на уровни папок src). Добавляем краткое описание проекта. Указываем что по умолчанию будет выполняться цель «dist»
  2. Указываем необходимые свойства – property
  3. Ant сборщик загружает цель по умолчанию – «dist» и определяет ее зависимость (depends) в данном случае это цель «compile»
  4. Ant сборщик загружает цель «compile» определяет ее зависимость (depends) в данном случае это цель «init»
  5. Ant сборщик загружает цель «init» и выполняет ее: создает необходимые директории и штамп времени
  6. Выполняется цель «compile»: вызывается компилятор javac, который компилирует исходные коды из «src» в папку «build»
  7. Выполняется цель «dist»: создается папка «dist», в которой создается jar архив.
В build файле есть также цель, для очистки всех директорий, «clean», она может быть вызвана отдельно.
Выполнение build скрипта
Для выполнения скрипта в командной строке, в папке с фалом build.xml необходимо выполнить следующую команду:
> ant
Apache Ant автоматически подхватит файл build.xml и выполнить его «цель» указанную по умолчанию.
Для получения справочной информации о build скрипте, необходимо выполнить команду:
> ant -p
Результатом работы которой, будет список всех «целей».
Для выполнения определенной «цели» зи build скрипта, необходимо выполнить команду вида:
> ant <имя цели>
Для получения более подробной информации о параметрах командной строки Apache Ant
выполните команду:
> ant -?
Для получения более подробной информации о Apache Ant достаточно обратится к его вложенной документации, которая широко описывает процесс работы с утилитой.
В дальнейших статьях, примерах, посвященным java программированию, я планирую активно использовать Apache Ant, в которых я постараюсь описать другие его возможности.
Жду ваших пожеланий и комментариев.

1 комментарий:

apilyugina комментирует...

понравилась статья,спасибо. еще тут почитать можно http://www.enterra.ru/blog/automation_builds_android_applications/