Инструкция по работе с Apache ANT
Инструмент сборки – это инструмент программирования, который используется для создания новой версии программы. Он автоматизирует создание исполняемого приложения из любого исходного кода.
Что такое Apache Ant Build Tool?
Ant – это сокращение от Another Neat Tool. Это инструмент сборки на основе XML, который является широко используемым инструментом сборки на основе Java с полной переносимостью чистого кода Java. Например, он позволяет разработчикам применять гибкие принципы и позволяет разрабатывать на основе тестов. Вы можете использовать его для всех повторяющихся задач. Например, создание документации.
Зачем использовать инструмент сборки как ANT?
Вот важные плюсы использования инструмента Build:
История Apache Ant
Вот важные исторические вехи инструмента Apache Ant:
Особенности Apache Ant
Вот основные функции Apache Ant:
Установка и настройка Apache Ant
Мы предполагаем, что вы уже загрузили и установили Java Development Kit (JDK) на свой компьютер. Убедитесь, что для переменной среды JAVA_HOME задана папка, в которой установлен JDK.
Шаг 1) Загрузите файлы с https://ant.apache.org/bindownload.cgi
Шаг 2) Распакуйте этот zip-файл в удобную папку c: \. Использование Winzip, WinRAR, 7-zip или аналогичных инструментов.
Шаг 3) Создайте переменную среды для «ANT_HOME» и присвойте значение переменной местоположению папки Ant.
Шаг 4) Нажмите «Расширенные настройки системы».
Шаг 5) Нажмите на вкладку «Дополнительно».
Шаг 6) Нажмите кнопку «Переменные среды…».
Шаг 7) Нажмите «Создать», чтобы создать новую пользовательскую переменную.
Шаг 8) Введите данные новой пользовательской переменной
Шаг 9) Нажмите кнопку «ОК».
Шаг 10) Нажмите «ОК», чтобы закрыть экран.
Вы увидите следующий экран:
Пример Apache ANT
Давайте сохраним это как “buildl.xml”
Структура проекта
Каждая сборка будет содержать три узла:
Проект:
Все внутри файла сборки в Apache ANT находится в проекте.
Target – это набор задач, который определяется для получения определенного состояния процесса сборки.
Задания:
Это кусок кода, который может быть выполнен. Задача имеет несколько аргументов или атрибутов.
Общий шаблон метода для написания задачи:
Вы можете использовать сборку в задаче или создать свою задачу.
Лучшие практики использования
Вот несколько рекомендаций по использованию Apache Ant.
Преимущества использования
Вот преимущества и преимущества использования Apache Ant:
Сборка Java приложений при помощи Apache Ant, quick start
О чем эта статья
Одной из отличительных особенностей платформы Java является ее независимость от используемого инструментария. Вы можете разрабатывать сколь угодно большое Java приложение при помощи блокнота (vi) и командной строки. Понятно что так никто не делает и все используют какую-то IDE. Как следствие независимости от инструментов — IDE для Java много. Все это хорошо но есть одна особенность. Если Ваш коллега делал приложение и для сборки проекта использовал IDE_A то в IDE_B которая стоит у Вас — собрать приложение не получится.
В общем-то это давно уже не проблема. Хорошей практикой считается использовать систему сборки не зависящую от IDE. Для Java их две это Apache-Ant и Maven (тоже в общем-то Apache). Но тут есть один подводный камень. Если в Delphi или Visual Studio, чтобы создать и собрать приложение надо кликнуть в кнопку new пройтись по шагам визарда и нажать кнопку собрать, то написание ant скрипта для сборки например web приложения, особенно для начинающего разработчика, задача не тривиальная.
В статье рассматривается сборка и деплой Java web приложения шаг за шагом.
В целом задачу можно решить как с помощью ant так и с помощью maven, здесь будет рассмотрен ant. Для начинающих он проще и нагляднее.
Примечание 10 лет спустя
Решил посмотрел на свою статью написанную 10 лет назад. Звучит старомодно, в 2021 я в общем случае не рекомендую собирать Java приложения при помощи ant. НО если уж у вас возникла такая необходимость, то статья все еще может помочь. Пусть живет.
Зачем нужен скрипт сборки
Собираем и деплоим war
Есть много способов собрать war и есть много способов расположить файлы приложения. В статье дается один способ — может быть не самый лучший но вполне неплохой.
Структура проекта
Файлы проекта располагаем вот так.
В реальном проекте вместо stepN.xml будет build.xml. Библиотек будет больше и каждую следует располагать в отдельном каталоге. Имена пакетов выдают что я работаю в компании DataArt.
Шаг 1: компиляция
Шаг 2: улучшаем скрипт
Скрипт шага 1 довольно не гибкий и ряд путей там прописан дав раза. Давайте его улучшим
Шаг 3: Пути к библиотекам
Пути к библиотекам прописаны жестко в середине кода. Это не есть хорошо, меняем.
Шаг 4: Управление кофигурациями
Управление конфигурациями это мега технология о которой меня рассказал матерый американский программер Walden Mathews. Суть в следующем, при сборке вы пишете в файл свойств таймаут или путь до какого-то внешнего каталога или URL какого-то сервиса. На вашей локальной машине он один, на боевом сервере (или на машине коллеги другой). Вопрос — как использовать правильные значения свойств и не поубивать друг друга.
Здесь в target init читается файл с именем, совпадающим с Вашим именем пользователя. Если такой не находится сборка дальше не идет. А уже потом читаются дефолтные свойства из default. Так как в ant значения свойств переопределять нельзя то в default должны быть все свойства, а в Вашем файле только те значения которых отличаются.
default.properties
semenych.properties
Обратите внимание что в команде написано просто mihalych а не mihalych.properties
Шаг 5: Давайте уже соберем jar и war файл
Да действительно давайте.
вот эта секция делает замену внутри web.xml при этом web.xml выглядит так:
Шаг 6: war готов, последний штрих, деплой
Скрипт будет делать так называемый «холодный» деплой т.е. развертывание приложения с остановкой сервера. В ряде случаев «холодный» деплой позволяет избежать ряда проблем связанных с освобождением ресурсов и чисткой кэша.
Заключение
Вот собственно и все. Это почти готовый пример взятый из реального проекта. Пользуйтесь на здоровье, не забывайте писать комментарии.
Инструменты сборки Java: Ant против Maven против Gradle
В экосистеме JVM доминируют три инструмента сборки:
Муравей с плющом

После первоначального выпуска он был улучшен возможностью принимать плагины.
Основным недостатком был XML как формат для написания скриптов сборки. XML, будучи по своей природе иерархическим, не очень подходит для процедурного подхода к программированию, который использует Ant. Другая проблема с Ant состоит в том, что его XML имеет тенденцию становиться неуправляемо большим при использовании со всеми проектами, кроме очень маленьких.
Основным преимуществом Ant является его контроль над процессом сборки.
специалист

Maven продолжает использовать XML в качестве формата для написания спецификации сборки. Однако структура диаметрально отличается. В то время как Ant требует от разработчиков написания всех команд, которые приводят к успешному выполнению какой-либо задачи, Maven опирается на соглашения и предоставляет доступные цели (цели), которые могут быть вызваны. В качестве дополнительного, и, вероятно, наиболее важного дополнения, Maven представил возможность загрузки зависимостей по сети (позже принятую Ant через Ivy). Это само по себе революционизировало способ поставки программного обеспечения.
Однако у Maven есть свои проблемы. Управление зависимостями плохо обрабатывает конфликты между разными версиями одной и той же библиотеки (в этом Айви гораздо лучше). XML как формат конфигурации сборки строго структурирован и стандартизирован. Настройка целей (целей) сложно. Поскольку Maven сфокусирован в основном на управлении зависимостями, сложные, настраиваемые сценарии сборки на самом деле труднее писать в Maven, чем в Ant.
Конфигурация Maven, написанная на непрерывном XML, является большой и громоздкой. В больших проектах он может содержать сотни строк кода, не делая ничего «экстраординарного».
Основным преимуществом Maven является его жизненный цикл. Пока проект основан на определенных стандартах, с Maven можно относительно легко пройти весь жизненный цикл. Это происходит за счет гибкости.
В то же время интерес к DSL (предметно-ориентированным языкам) продолжал расти. Идея состоит в том, чтобы иметь языки, предназначенные для решения проблем, относящихся к определенной области. В случае сборок одним из результатов применения DSL является Gradle.
Gradle

Gradle не использует XML. Вместо этого у него был собственный DSL на основе Groovy (один из языков JVM). В результате скрипты сборки Gradle имеют тенденцию быть намного короче и понятнее, чем написанные для Ant или Maven. Объем стандартного кода намного меньше с Gradle, поскольку его DSL предназначен для решения конкретной проблемы: продвижение программного обеспечения через его жизненный цикл, от компиляции до статического анализа и тестирования до упаковки и развертывания.
Национальная библиотека им. Н. Э. Баумана
Bauman National Library
Персональные инструменты
Apache Ant
Apache Ant (англ. ant — муравей и акроним — «Another Neat Tool») — утилита для автоматизации процесса сборки программного продукта. Является платформонезависимым аналогом утилиты make, где все команды записываются в XML-формате.
Ant был создан в рамках проекта Jakarta, сегодня — самостоятельный проект первого уровня Apache Software Foundation.
Первая версия была разработана инженером Sun Microsystems Джеймсом Дэвидсоном (James Davidson (англ.)русск.), который нуждался в утилите, подобной make, разрабатывая первую референтную реализацию J2EE.
Ant, в отличие от другого сборщика проектов Apache Maven, обеспечивает императивную, а не декларативную сборку проекта. [Источник 1]
Содержание
Описание
В отличие от make, утилита Ant полностью независима от платформы, требуется лишь наличие на применяемой системе установленной рабочей среды Java — JRE. Отказ от использования команд операционной системы и формат XML обеспечивают переносимость сценариев.
Управление процессом сборки происходит посредством XML-сценария, также называемого Build-файлом. В первую очередь этот файл содержит определение проекта, состоящего из отдельных целей (Targets). Цели сравнимы с процедурами в языках программирования и содержат вызовы команд-заданий (Tasks). Каждое задание представляет собой неделимую, атомарную команду, выполняющую некоторое элементарное действие.
Между целями могут быть определены зависимости — каждая цель выполняется только после того, как выполнены все цели, от которых она зависит (если они уже были выполнены ранее, повторного выполнения не производится).
Типичными примерами целей являются clean (удаление промежуточных файлов), compile (компиляция всех классов), deploy (развёртывание приложения на сервере). Конкретный набор целей и их взаимосвязи зависят от специфики проекта.
Ant позволяет определять собственные типы заданий путём создания Java-классов, реализующих определённые интерфейсы.
Принцип работы
Часто применяемые задания (Tasks)
В поставку входит множество библиотек, затрагивающие широкий набор задач. Кроме этого на веб-сайте проекта доступны дополнительные библиотеки, расширяющие функциональность продукта, например, для интеграции со сторонними системами. Стандартная версия содержит более 150 типов задач. Примеры таких команд представлены ниже.
| Код | Действие |
|---|---|
| javac | компиляция Java-кода |
| copy | копирование файлов |
| delete | удаление файлов и директорий |
| move | перемещение файлов и директорий |
| replace | замещение фрагментов текста в файлах |
| junit | автоматический запуск юнит-тестов |
| exec | выполнение внешней команды |
| zip | создание архива в формате Zip |
| cvs | выполнение CVS-команды |
| отправка электронной почты | |
| xslt | наложение XSLT-преобразования |
Пример создания проекта
Для демонстрации возможностей, создается небольшой проект, который будет включать в себя html, css, js. [Источник 2]
Создание html-файла
Создание XML-файла
Далее создаем файл, который используется Ant по умолчанию. Он должен называться build.xml :
Создание свойств
Ant содержит свойства, которые похожи на обычные переменные. Создадим задачу для импорта свойств:
Теперь создадим файл ant.properties:
Создание задач
Запуск задачи
Теперь настроим автозапуск задач. Они будут запускаться изнутри задачи по умолчанию initialize:
Установка и настройка Apache Ant
Дополнительно устанавливаем JDK с официального сайта.
. У вас путь до JDК и Ant может отличаться. Перед копипастом команд и настроек проверьте все пути и измените их под себя.
В моем случае Ant лежит в C:\ant а JDK в C:\Program Files\Java\jdk1.7.0_51
Ниже другой вариант настройки. Возможно так кому-то будет удобнее.
В разделе Системные переменные нажимаем кнопку Создать и добавляем две новые переменные:
первая переменная ANT_HOME со значением C:\ant
вторая переменная JAVA_HOME и ее значение: C:\Program Files\Java\jdk1.7.0_51
Нажимаем ОК
Важный момент. Если в PATH, в поле Значение переменной уже что-то вписано, аккуратно ставим в конце строки точку с запятой и дописываем:
%JAVA_HOME%\bin;%ANT_HOME%\bin
У меня Значение переменной для PATH выглядит так:
C:\adb;%JAVA_HOME%\bin;%ANT_HOME%\bin
Сборка Java приложения, ant
Пример описания сценария сборки :
Сценарий сборки ant‘у показывает что надо делать, чтобы превратить из того, что есть (как правило, исходный java-код) в то, что необходимо. Сценарий представляет собой детальный план сборки из частей единого целого, включающий ряд операндов, позволяющих выполнять команды копирования, удаления и перемещения файлов, компиляции java-файлов, формирование документации к коду и исполняемого jar-файла.
Корневой элемент сценария project может содержать три необязательных атрибута :
Элемент описывающий цель проекта target может содержать следующие атрибуты :
Параметр property определяет пару имя/значение, которая может многократно использоваться в сценарии подобно переменным. Свойства (настройки) можно определять как внутри build.xml файла, так и в отдельных файлах. При определении внутри xml файла свойства могут включать следующие атрибуты :
Шаблон простейшего сценария :
Согласно представленному сценарию ant‘у необходимо удалить все *.jar файлы из директории d:\projects\bin.
В примере сценарий сборки содержит тег проект project, включающий несколько заданий target. Первая строка примера содержит общую инфомацию о проекте. Самые важные атрибуты проекта project это элемент наименования задания (значение default) и базовая директория basedir.
Атрибут basedir указывает на базовую директорию, от которой будут вычисляться относительные пути, используемые в сценарии сборки. Каждый проект может иметь только один атрибут basedir, поэтому можно указывать либо полные пути, либо разбивать сценарий на несколько файлов сборки, в каждом из которых указывать свою базовую директорию. Атрибут default указывает на задание target, определенное для выполнения по-умолчанию.
ant работает из командной строки поэтому необходимо определить переменную окружения ANT_HOME, указывающую корневую директорию приложения.Для запуска ant’a на выполнение сценария необходимо правильно описать команду. Примеры вызова Ant’а для выполнения сценария:
Определение свойств задания, ant property
Свойства в сценарии ant – это аналог переменных в программировании. Каждое свойство имеет два параметра :
Примеры определения свойств для секций, property :
Создание директории, ant mkdir
В представленном задании «make.dir» ant должен создать директорию «D:\Release\myProject», определенную атрибутом «dstDir».
Копирование файлов, ant copy todir
Представленный сценарий решает задачу копирования файла myProject.ini из директории проекта prjDir в директорию сборки проекта basedir.
Для файлов может быть указан набор масок patternset, по которым будут отбираться файлы. Шаблон patternset может быть включен как вложенный элемент
в элемент fileset и иметь атрибут id, по которому можно ссылаться на данный набор из других мест сборки. Например:
Элементы include и exclude указывают на маски (фильтры), результат применения которых следует включать и не включать в набор.
Компиляция java-файлов, ant javac
Следующие задания сценария сборки решают задачу компиляции java-файлов. Элемент srcDir определяет директорию с файлами исходных кодов. Если java-файлы располагаются в поддиректории, то после фигурных скобок и «слеша» необходимо указать поддиректорию.
Элемент destDir определяет директорию назначения. Если в исходных java-файлах указан пакет package, то откомпилированные class-файлы будут располагаться в соответствующих поддиректориях.
Второе задание compile зависит от первого задания common согласно значения атрибута depends, в связи с чем при вызове ant‘а с флагом compile первоначально будет выполнено первое задание.
Java приложения, как правило, поставляются упакованными в jar файлы. ant использует команду «jar» для создания архивов :
В представленном задании сценарий формирования файла jar зависит от задания компиляции compile. Упакованный архив в виде файла myProject.jar будет включать все поддиректории с файлами, расположенными в директории dstDir.
Определение манифеста приложения
ant позволяет вставить в сборку готовый файл манифеста manifest.mf.
Но можно также определить содержимое манифеста:
Запуск приложения, ant fork
Ант позволяет запускать приложение. Для этого необходимо определить параметры приложения и свойству fork присвоить значение «true». Определим задание для запуска создаваемого jar-файла.
Следует обратить внимание, что параметр depends имеет значение dist. Поэтому, пока архив не создан, запускать нечего. Запуск программы осуществляет тег «java». Его параметр jar указывает, что мы хотим запустить программу из jar-архива. Параметр fork имеет значение true, это означает, что для запуска программы мы используем отдельную виртуальную машину (обязательное требование при запуске из jar-файла).
Задание с тестами, JUnit
Следующая задача запускает тесты (если они были созданы прежде).
Тестирование выполняется в теге junit, который имеет два параметра:
Содержимое тега classpath определяет размещение скомпилированных тестов и классов, которые они трестируют.
Тег formatter задает параметры отображения результатов тестирования. Параметр type=»plain» указывает, что результаты тестирования должны отображаться в виде обычного текста, а параметр usefile=»false» обеспечивает вывод результатов на экран, а не в файл.
С помощью тега test запускается тест. В параметре name указывается наименование теста.
Архивирование файлов, ant zip
С помощью параметра destfile задаем имя архива. А вложенный тег fileset позволяет указать перечень файлов, которые войдут в архив.
Очистка временных директорий, ant delete
Для очистки временных директории и удаления файлов необходимо использовать тег delete. С её помощью можно удалить результаты работы всех предыдущих задач и оставить только исходники.
Тег delete удаляет папку и её содержимое. Параметр dir задает имя папки. В последнем теге параметр file определяет имя файла.
Обратите внимание, что в первом теге delete имя папки указывается явно (не используя параметры), что позволяет за один раз удалить папки build/classes и build/tests.
Перемещение и переименование файлов/директорий, ant move
Для переименования и перемещения файлов или директорий необходимо использовать move.
Создание документации, ant javadoc
ant можно использовать для создания документации java-приложения. Пример задания приведен на странице javadoc.
Подробная информация формирования документации представлена на странице Javadoc/Javadoc2















