Java ant

Apache Ant - фреймворк для автоматизації процесу складання програмного продукту. Разом з Apache Maven є найпопулярнішими збирачами проектів. Також, як і Maven. дуже активно використовується в великих проектах.

Ant. на відміну від іншого збирача проектів Apache Maven. забезпечує імперативну, а не декларативну збірку проекту. Управління процесом складання відбувається за допомогою XML-сценарію. також званого Build-файлом. В першу чергу цей файл містить визначення проекту, що складається з окремих цілей (Targets). Цілі можна порівняти з процедурами в мовах програмування і містять виклики команд-завдань (Tasks). Кожне завдання являє собою неподільну, атомарному команду, що виконує деякий елементарне дію.

Між цілями можуть бути визначені залежності - кожна мета виконується тільки після того, як виконані всі цілі, від яких вона залежить (якщо вони вже були виконані раніше, повторного виконання не проводиться). Найпопулярнішими завданнями (Tasks) є:

Загалом, таких команд близько 150, але малоймовірно, що вони все вам знадобляться.

Всі осягається на практиці! Давайте за допомогою Apache Ant зберемо той же проект, що був в статті Java Maven. Частина 1 - Введення. Для цього створимо новий проект з ім'ям AntExample. але класи будуть ті ж. В папці src створимо ієрархію пакетів ru.javaxblog.time. в якій буде клас Time:

public class Time

public static void main (String [] args) <
String dt = new java. text. SimpleDateFormat (( "hh: mm aaa")). format (java. util. Calendar. getInstance (). getTime ());
JOptionPane. showMessageDialog (null. "Сьогодні:" + dt, "Час". JOptionPane. INFORMATION_MESSAGE);
>
>

Нагадаю, що дана програма просто виводить поточний час в діалоговому вікні. Також створюємо простий JUnit тест в нашому проекті. Тестовий клас TestTime буде знаходиться в папці test і матиме таку ж ієрархію пакетів ru.javaxblog.time:

import static org. junit. Assert. *;

public class TestTime

@Test
public void testMain () <
String dt = new java. text. SimpleDateFormat (( "hh: mm aaa")). format (java. util. Calendar. getInstance (). getTime ());
assertNotNull (dt);
>

Настав час встановити бібліотеку Ant. Ми будемо працювати з останньою на даний момент версією Apache Ant. а саме 1.8.4. яку можна завантажити тут. Процес установки наступний:

1) Розпаковуєте zip архів в директорію, в яку хочете встановити Ant. У мене це C: \ Program Files \ Java. Після розпакування створиться піддиректорія з ім'ям apache-ant-1.8.4
2) Створіть змінну середовища з ім'ям ANT_HOME. Це робиться так: натискаєте WinKey + Pause. далі Додаткові параметри системи. знаходите кнопку Змінні середовища. потім Створити. вказуєте ім'я змінної ANT_HOME і задаєте значення, що є шляхом до директорії apache-ant-1.8.4. у мене шлях вийшов таким: C: \ Program Files \ Java \ apache-ant-1.8.4
3) Тут же створіть або змініть змінну Path. присвоївши їй значення% ANT_HOME% / bin. Дана дія дозволить нам працювати з Ant через командний рядок.
4) Також переконайтеся, що у вас є змінна з ім'ям JAVA_HOME і вона містить шлях до вашого JDK. У мене: C: \ Program Files \ Java \ jdk1.7.0_01
5) Відкрийте командний рядок і зайдіть в вашу ANT_HOME директорію. З цієї директорії запустіть команду ant -f fetch.xml -Ddest = system. Цей пункт необов'язковий, він просто дозволить Ant зробити доступними деякі додаткові можливості.
6) Для перевірки коректної установки Ant. введіть у командному рядку команду ant -version. Якщо установка пройшла вірно, ви побачите інформацію про встановлену версії Apache Ant.

Сподіваюся, установка пройшла успішно. Тепер спробуємо зібрати наш проект. Інформація для програмного проекту, підтримуваного Apache Ant. міститься в XML-файлі. як правило з ім'ям build.xml. Поміщається даний файл в головну директорію нашого проекту. Ant буде послідовно виконувати команду за командою з цього файлу, починаючи з мети з ім'ям, зазначеної в атрибуті default. і закінчуючи самою останньою. Найпростіший приклад файлу build.xml:



I'm building my software

Як бачите, головним тегом є project. Він містить два атрибути: name. в якому вказується ім'я проекту, default. в якому вказується ім'я першого завдання, яке будуть виконано (тут, завдання з ім'ям all). Тег project об'єднує в собі теги target. У нашому прикладі тег target всього один. Він містить в собі одну єдину команду - echo. яка виведе зазначений рядок. В цілому, слід зазначити, команди Apache Ant. дуже схожі на операції в командному рядку. Виконати цей build файл можна командою: ant -f build.xml. Після чого ви побачите, як буде виведена напис I'm building my software. Так як ім'я за замовчуванням для build файлу - це build.xml. то ми можемо опустити аргумент -f і просто набрати Ant без параметрів: ant.

Давай розглянемо файл з більш ніж одним завданням і залежністю:

This is a project which uses dependancies




I'm building my software

Мета за замовчуванням з ім'ям all. але вона залежить від іншої мети, тому спершу виконається мета з ім'ям make_dirs_target. У цьому прикладі ми використовували ще одну нову команду - mkdir. Як бачите, вона теж дуже схожа на відповідну операцію командного рядка.

Давайте тепер спробуємо скомпілювати наш з вами проект AntExample:









Завдання all залежить від завдання compile. яке в свою чергу залежить від завдання make_dirs. Тому спершу створиться папка з ім'ям build. а в ній папка classes. Потім відбудеться компіляція з допомогою команди javac. в якій вказується цільова папка (build / classes) і папка з кодами (src). Після цього вже виконається завдання all. яке, в принципі, не має команд, тому нічого суттєвого не зробить.

Java додатки як правило поставляються упакованими в jar файли. Ant надає спеціальну задачу для створення jar файлів:














Команда jar створює jar файл в місці, зазначеному в атрибуті destfile. У jar архів потраплять всі файли, що задовольняють масці fileset. а саме: з директорії build / classes і з розширенням .class.

У наведеному прикладі шлях до папок явно вказані в коді сценарію. Іноді буває корисним винести їх в окремі властивості:
















Властивості в Ant задаються за допомогою тега. Властивості дуже схожі на константи в мовах програмування: задавши один раз, ви більше не зможете поміняти їх під час виконання сценарію. Звертатися до властивостей слід через конструкцію $.

В Eclipse ви також можете налаштувати автоматичну збірку проекту. Робиться це в такий спосіб. У меню Project імені команди Properties. У розділі Builders натискаєте New. вибираєте Ant Builder. потім ОК. Далі на вкладці Main натискаємо на Browse Workspace і вказуємо розташування файлу build.xml. На вкладці Build Options можна також поставити галочку навпроти Launch in background. щоб збірка запускалася у фоновому режимі. Два рази натискаємо ОК і знову заходимо в меню Project і ставимо галочку на Build Automatically. Тепер при кожному запуску вашого застосування в Eclipse. збірка проекту відбуватиметься автоматично. У ручну викликати збірку з Eclipse можна за допомогою Project-> Build Project.

Нам залишилося тільки показати Ant. що в нашому проекті є стороння бібліотека JUnit. і те, що в ході складання, ми хочемо також і провести юніт-тестування. Для цього додаємо ще одну мету з ім'ям «junit», всередині якої буде команда junit. за допомогою якої і буде проведено тестування:




























Розглянемо атрибути junit більш докладно:
printsummary = yes - в кінці прогону буде видана сума пройдених і не пройдених тестів
haltonfailure = yes - зупинити процес складання, якщо умова assert повернуло false
fork = yes - запуск на окремій JVM
Також можна задати і додаткові параметри JVM. такі як haltonerror - зупинити процес складання при виникненні помилки, maxmemory - розмір пам'яті і timeout - час на виконання тестів. Елемент test name дозволяє вказати нам ім'я класу з тестами для запуску і пакет, в якому він знаходиться. Так як unit-тести залежать від зовнішніх ресурсів, таких як сама бібліотека junit-4.10.jar і початкових кодів нашого проекту, то при їх компіляції ми обов'язково повинні вказувати елемент classpath. Тобто вказати JUnit. де шукати необхідні бібліотеки.