Меню Рубрики

Установка ant для java

Сборка Java приложения, ant

ant (анг. муравей) — это мощный платформо-независимый скриптовый инструмент, используемый для сборки приложений. Сценарий сборки приложения java оформляется в виде XML-файла подобно скриптам «make» при обработке файлов С/С++. По-умолчанию сценарий сборки извлекается из файла build.xml.

Пример описания сценария сборки :

  • копирование *.jar файлов в каталог релиза, но перед этим необходимо
  • сформировать *.jar файлы, но перед этим необходимо
  • скомпилировать java-файлы в файлы *.class

Сценарий сборки ant‘у показывает что надо делать, чтобы превратить из того, что есть (как правило, исходный java-код) в то, что необходимо. Сценарий представляет собой детальный план сборки из частей единого целого, включающий ряд операндов, позволяющих выполнять команды копирования, удаления и перемещения файлов, компиляции java-файлов, формирование документации к коду и исполняемого jar-файла.

Структура сценария сборки — ant project, basedir, target

Корневой элемент сценария project может содержать три необязательных атрибута :

  • name — имя проекта;
  • default — цель проекта по умолчанию;
  • basedir — базовая директория, относительной которой будут вычисляться все пути.

Элемент описывающий цель проекта target может содержать следующие атрибуты :

  • name — имя цели, обязательный атрибут;
  • depends — промежуточные цели, от которых зависит данная цель; имена перечисляются через запятую;
  • if — определяет какие свойства должны быть равны true для запуска цели;
  • unless — определяет какие свойства должны быть равны false для запуска цели;
  • description — краткое описание цели, что она делает.

Параметр property определяет пару имя/значение, которая может многократно использоваться в сценарии подобно переменным. Свойства (настройки) можно определять как внутри build.xml файла, так и в отдельных файлах. При определении внутри xml файла свойства могут включать следующие атрибуты :

  • name — имя свойства;
  • value — значение свойства;
  • location — устанавливает значение свойства в абсолютный путь. Если значение уже абсолютный путь, то ничего не меняется, если относительный то подставляется базовая директория. Символы / и \ меняются автоматически в зависимости от платформы;
  • ref >

Согласно представленному сценарию ant‘у необходимо удалить все *.jar файлы из директории d:\projects\bin.

В примере сценарий сборки содержит тег проект project, включающий несколько заданий target. Первая строка примера содержит общую инфомацию о проекте. Самые важные атрибуты проекта project это элемент наименования задания (значение default) и базовая директория basedir.

Атрибут basedir указывает на базовую директорию, от которой будут вычисляться относительные пути, используемые в сценарии сборки. Каждый проект может иметь только один атрибут basedir, поэтому можно указывать либо полные пути, либо разбивать сценарий на несколько файлов сборки, в каждом из которых указывать свою базовую директорию. Атрибут default указывает на задание target, определенное для выполнения по-умолчанию.

ant работает из командной строки поэтому необходимо определить переменную окружения ANT_HOME, указывающую корневую директорию приложения.Для запуска ant’a на выполнение сценария необходимо правильно описать команду. Примеры вызова Ant’а для выполнения сценария:

  1. ant -buildfile simple.xml clean.jar
  2. ant -buildfile simple.xml
  3. ant compile
  4. ant

В первом и втором примерах сценарии сборки определены параметром -buildfile и представлены в файле simple.xml. В третьем и четвертом примерах сценарии сборки представлены в файле build.xml, наименование которого используется по-умолчанию. В первом примере выполняется сценарий с заданием clean.jar, в третьем сценарии — compile. Во втором и четвертом примерах Ant выполняет сценарии, определенные по умолчанию.

Определение свойств задания, ant property

Свойства в сценарии ant – это аналог переменных в программировании. Каждое свойство имеет два параметра :

  • name – имя свойства;
  • value – значение.

Примеры определения свойств для секций, property :

Использовать свойства очень просто, для этого нужно имя свойства написать между символами $ < 'property.name' >. Например, выражение: $ /src будет преобразовано в «D:\Release\myProject\src».

Создание директории, ant mkdir

В представленном задании «make.dir» ant должен создать директорию «D:\Release\myProject», определенную атрибутом «dstDir».

Копирование файлов, ant copy todir

Представленный сценарий решает задачу копирования файла myProject.ini из директории проекта prjDir в директорию сборки проекта basedir.

Команда «copy» включает вложенный элемент , который определяет группу файлов. Файлы, которые включаются в эти группы, располагаются в поддиректориях относительно базовой, определенной атрибутом basedir корневого элемента project.

Для файлов может быть указан набор масок patternset, по которым будут отбираться файлы. Шаблон patternset может быть включен как вложенный элемент

в элемент fileset и иметь атрибут id, по которому можно ссылаться на данный набор из других мест сборки. Например:

Элементы include и exclude указывают на маски (фильтры), результат применения которых следует включать и не включать в набор.

Компиляция java-файлов, ant javac

Следующие задания сценария сборки решают задачу компиляции java-файлов. Элемент srcDir определяет директорию с файлами исходных кодов. Если java-файлы располагаются в поддиректории, то после фигурных скобок и «слеша» необходимо указать поддиректорию.

Элемент destDir определяет директорию назначения. Если в исходных java-файлах указан пакет package, то откомпилированные class-файлы будут располагаться в соответствующих поддиректориях.

Второе задание compile зависит от первого задания common согласно значения атрибута depends, в связи с чем при вызове ant‘а с флагом compile первоначально будет выполнено первое задание.

Для выполнения второго задания, т.е. для компиляции файлов, необходимо использовать дополнительные библиотеки, упакованные в .jar файлы, в связи с чем путь к этим библиотекам указывается в элементе classpath.

Существует 2 особенности задачи компиляции java-файлов javac. Во-первых, можно не указывать непосредственно имена java файлов — достаточно просто указать каталог. Во-вторых, если ant определит, что class файл существует и новее, чем java файл, то компиляция будет проигнорирована. Эти две особенности являются примерами приемов сборки приложения.

Формирование .jar файла, ant jar

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

Следующая задача запускает тесты (если они были созданы прежде).

Внимание. Для того, чтобы работала эта задача нам нужно рассказать ant где находится библиотека junit.jar. В документации к ant описывается три различных способа, которые позволяют это сделать. Самый простой способ — это копирование файла junit.jar в папку ANT_HOME/lib.

Тестирование выполняется в теге junit, который имеет два параметра:

  • fork – запускает тесты в отдельной виртуальной машине;
  • haltonfailure – останавливает выполнение, в случае если тест не проходит.

Содержимое тега classpath определяет размещение скомпилированных тестов и классов, которые они трестируют.
Тег formatter задает параметры отображения результатов тестирования. Параметр type=»plain» указывает, что результаты тестирования должны отображаться в виде обычного текста, а параметр usefile=»false» обеспечивает вывод результатов на экран, а не в файл.

С помощью тега test запускается тест. В параметре name указывается наименование теста.

Архивирование файлов, ant zip

С помощью параметра destfile задаем имя архива. А вложенный тег fileset позволяет указать перечень файлов, которые войдут в архив.

Согласно заданию в архив включаем только исходные коды java и файлы с расширениями mf, xml. Атрибут dir задает стартовую папку, includes – указывает шаблоны выбора файлов в архив («**» — означают любую папку, «*» — любое количество любых символов в имени файла).

Очистка временных директорий, ant delete

Для очистки временных директории и удаления файлов необходимо использовать тег delete. С её помощью можно удалить результаты работы всех предыдущих задач и оставить только исходники.

Тег delete удаляет папку и её содержимое. Параметр dir задает имя папки. В последнем теге параметр file определяет имя файла.

Обратите внимание, что в первом теге delete имя папки указывается явно (не используя параметры), что позволяет за один раз удалить папки build/classes и build/tests.

Перемещение и переименование файлов/директорий, ant move

Для переименования и перемещения файлов или директорий необходимо использовать move.

Создание документации, ant javadoc

ant можно использовать для создания документации java-приложения. Пример задания приведен на странице javadoc.

Подробная информация формирования документации представлена на странице Javadoc/Javadoc2

источник

Сборка 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. Для начинающих он проще и нагляднее.

Зачем нужен скрипт сборки

  • Независимость проектных задач от окружения.
  • 100% повторяемость любого результата (работает у меня – работает у всех)
  • Исключение человеческого фактора из важных операций
  • Превращение деплоя из сложной операции в рутинную задачу.

Собираем и деплоим war

Есть много способов собрать war и есть много способов расположить файлы приложения. В статье дается один способ — может быть не самый лучший но вполне неплохой.

Структура проекта

Файлы проекта располагаем вот так.

В реальном проекте вместо stepN.xml будет build.xml. Библиотек будет больше и каждую следует располагать в отдельном каталоге. Имена пакетов выдают что я работаю в компании DataArt.

Шаг 1: компиляция

Для начала просто скомпилируем весь код, подключив бибилиотеку GSON. Компилированный код идет в каталог .build. Имя может быть любым, но обычно удобно если имя каталога начинается с точки.

Шаг 2: улучшаем скрипт

Скрипт шага 1 довольно не гибкий и ряд путей там прописан дав раза. Давайте его улучшим

Шаг 3: Пути к библиотекам

Пути к библиотекам прописаны жестко в середине кода. Это не есть хорошо, меняем.

Шаг 4: Управление кофигурациями

Управление конфигурациями это мега технология о которой меня рассказал матерый американский программер Walden Mathews. Суть в следующем, при сборке вы пишете в файл свойств таймаут или путь до какого-то внешнего каталога или URL какого-то сервиса. На вашей локальной машине он один, на боевом сервере (или на машине коллеги другой). Вопрос — как использовать правильные значения свойств и не поубивать друг друга.

Здесь в target init читается файл с именем, совпадающим с Вашим именем пользователя. Если такой не находится сборка дальше не идет. А уже потом читаются дефолтные свойства из default. Так как в ant значения свойств переопределять нельзя то в default должны быть все свойства, а в Вашем файле только те значения которых отличаются.

default.properties
semenych.properties

Если Вы хотите собрать проект с файлом свойств имя которого отличается от имени пользователя — пишете так
ant -Denv=mihalych compile

Обратите внимание что в команде написано просто mihalych а не mihalych.properties

Шаг 5: Давайте уже соберем jar и war файл

вот эта секция делает замену внутри web.xml при этом web.xml выглядит так:

Шаг 6: war готов, последний штрих, деплой

Скрипт будет делать так называемый «холодный» деплой т.е. развертывание приложения с остановкой сервера. В ряде случаев «холодный» деплой позволяет избежать ряда проблем связанных с освобождением ресурсов и чисткой кэша.

Заключение

Вот собственно и все. Это почти готовый пример взятый из реального проекта. Пользуйтесь на здоровье, не забывайте писать комментарии.

источник

Apache Ant – быстрый старт

Apache Ant должен быть знаком каждому Java-программисту: это популярный инструмент сборки ПО (build tool), полностью написанный на Java. Ant использует сценарий, который является обычным XML-файлом. Несмотря на его Java-направленность, веб-разработчики тоже используют этот инструмент.

Мы пройдём пять простых шагов, чтобы начать использовать Ant:

  1. Скачаем, установим и проверим.
  2. Напишем простой HelloWorld сценарий.
  3. Разберёмся с принципами работы и XML форматом сценария сборки.
  4. Узнаем минимально необходимый список заданий.
  5. Напишем сценарий для полного цикла сборки и тестирования учебного проекта.

Нам потребуется Java SE Development Kit (JDK, скачиваем по адресу www.oracle.com/technetwork/java/javase/downloads), ваш любимый текстовый редактор (в Linux – vi/vim/gedit, для Windows рекомендую Notepad++) и базовые навыки работы в командной строке. Сценарии сборки и примеры на Java протестированы в Linux (Simply Linux 7.95.0, CentOS Linux 6.8) и в Windows (XP/7). Использование Ant одинаково и в Linux и в Windows.

1. Скачиваем, устанавливаем, проверяем

Linux: устанавливаем из репозитария командой вроде sudo apt-get install ant (замените apt-get на yum если необходимо). Важно: нам нужна версия не ниже 1.8.*. В репозитарии CentOS 6.8 версия 1.7.1, поэтому лучше использовать скрипт, описанный в предыдущей статье.

Windows: посещаем веб-сайт ant.apache.org, заходим в раздел Download/Binary Distributions и скачиваем архив apache-ant-1.10.1-bin.zip (возможно сейчас есть уже более свежая версия). Содержимое архива копируем в любой каталог, например в «C:\Program Files\Apache Ant». Затем добавляем путь к каталогу bin (C:\Program Files\Apache Ant\bin) в системную переменную Path.

Проверяем работоспособность, вызвав ant в командной строке:

$ ant -version
Apache Ant(TM) version 1.10.1 compiled on February 2 2017

Если аналогичное сообщение получено – всё в порядке.

2. Пишем HelloWorld сценарий

Создаём в домашнем каталоге подкаталог hello (в Linux это делает команда mkdir, в Windows – md) и сохраняем туда файл с именем build.xml, содержащий предложенный выше сценарий. Переходим в этот каталог и вызываем ant:

$ mkdir hello
$ cd hello
$ ant
Buildfile: /home/lamp/hello/build.xml

hello:
[echo] Hello, World!
BUILD SUCCESSFULL

3. Основные принципы работы

В target есть возможность указать зависимость с помощью атрибута depends. Зависимости связывают target’ы между собой. Например, есть target c именем “compile”, а есть – с именем “run”, зависимый от “compile”. И если мы захотим выполнить “run”, сначала выполнится “compile”.

4. Минимально необходимый список заданий (tasks)

Стандартная версия Ant содержит более 150 заданий (https://ant.apache.org/manual/tasklist.html). Нам пока потребуются только семь:

  • echo – вывод сообщений в консоль
  • mkdir – создание директорий
  • delete – удаление файлов и директорий
  • javac – компиляция Java–кода
  • java – запуск class и jar файлов
  • jar – создание jar файла
  • junit – запуск тестов

5. Сценарий для сборки и тестирования Java проекта

И сохраняем туда файл HelloWorld.java следующего содержания:

А затем немного усложняем текст нашего сценария (build.xml):

Теперь сценарий содержит три target (команды): compile (компиляция файла(ов) .java), run (запуск файла .class), clean (удаление папок с результатами компиляции). При этом compile содержит два tasks – mkdir и javac. Обратите внимание на зависимость: target run предварительно вызовет compile. Кроме того run – это target по умолчанию для проекта.

Запускаем сценарий без параметров и видим результат работы Java программы: Hello, World!

Прямое указание имен каталогов не говорит о хорошем стиле. Особенно если имена в сценарии повторяются. Модифицируем build.xml, используя property (обратите внимание, как нам пригодилось имя проекта, заданное в project) и добавив пару комментариев:

Теперь добавим в сценарий target package для формирования jar файла:

и убедимся что всё работает:

$ ant package
$ java -jar build/HelloWorld.jar
Hello, World!

Перейдём к тестированию. Изменим код проекта (чтобы было что тестировать):

и добавим в каталог src файл/класс TestHello.java с простым тестом:

Используя информацию со страницы https://github.com/junit-team/junit4/wiki/getting-started скачиваем два файла, junit-4.12.jar и hamcrest-core-1.3.jar и копируем их в каталог нашего JDK/jre/lib/ext (такую команду копирования используем в CentOS 6.8):

$ java -cp build/classes org.junit.runner.JUnitCore TestHello
JUnit version 4.12
.
Time: 0,281
OK (1 test)

Добавляем в наш сценарий ещё один target – test:

и дополняем строку в target package (jar):

Теперь к списку команд нашего сценария (compile, run, package, clean) добавилась test.
В заключение меняем код нашего проекта так, чтобы приветствие выводилось в отдельном графическом окне. Затем формируем jar файл и запускаем его двойным кликом мыши (у вас должно быть настроено выполнение jar файлов по двойному клику).

Слегка дополняем сценарий (в target run), дописав fork=«true» (запуск выполнения класса в другой виртуальной машине). В противном случае run не сработает (проверено экспериментально):

Выполняем команду формирования jar файла ($ ant package), открываем в проводнике файлов каталог

источник

Читайте также:  Установка автосигнализаций с автозапуском свао

Добавить комментарий