Apache Ant (англ. ant — мураха і водночас акронім — «Another Neat Tool») — java-утиліта для автоматизації процесу збирання програмного продукту.

Apache Ant (Another Neat Tool)
Apache Ant Logo
Типпрограма для автоматичного складання
РозробникApache Software Foundation
Стабільний випуск1.9.3 (29 грудня 2013; 10 років тому (2013-12-29))
Платформавіртуальна машина Java
Операційна системакрос-платформовий
Мова програмуванняJava
ЛіцензіяApache License 2.0
Репозиторійhttps://git-wip-us.apache.org/repos/asf/ant.git, https://gitbox.apache.org/repos/asf/ant.git
Вебсайтant.apache.org

Ant — платформонезалежний аналог UNIX-утиліти make, але з використанням мови Java, він вимагає платформи Java, і краще пристосований для Java-проєктів. Найпомітніша безпосередня різниця між Ant та Make те, що Ant використовує XML для опису процесу збирання і його залежностей, тоді як Make має свій власний формат Makefile. За умовчанням XML-файл називається build.xml.

Ant був створений в рамках проєкту Jakarta, сьогодні — самостійний проєкт першого рівня Apache Software Foundation.

Перша версія була розроблена інженером Sun Microsystems Джеймсом Девідсоном (James Davidson), який потребував утиліти подібної make, розробляючи першу референтну реалізацію J2EE.

Опис

ред.

На відміну від make, утиліта Ant повністю незалежна від платформи, потрібно лише наявність на застосовуваній системі встановленої робочого середовища Java — JRE. Відмова від використання команд операційної системи і формат XML забезпечують переносимість сценаріїв.

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

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

Типовими прикладами цілей є clean (видалення проміжних файлів), compile (компіляція всіх класів), deploy (розгортання програми на сервері). Конкретний набір цілей та їхнього взаємозв'язку залежать від специфіки проєкту.

Ant дозволяє визначати власні типи завдань шляхом створення Java-класів, що реалізують певні інтерфейси.

Часто вживані завдання (Tasks)

ред.

Нижче наведено неповний перелік завдань з коротким описом. Актуальна версія програми (1.7) містить близько 150 типів завдань.

Код Дія
Javac компіляція Java-коду
Copy копіювання файлів
Delete видалення файлів і директорій
Move переміщення файлів і директорій
Replace заміщення фрагментів тексту у файлах
JUnit автоматичний запуск юніт-тестів
Exec виконання зовнішньої команди
Zip створення архіву у форматі Zip
CVS виконання CVS-команди
Mail відправка електронної пошти
Xslt накладення XSLT-перетворення

Приклад сценарію

ред.

Цей сценарій визначає дві мети — clean і build. Перша виконує вилучення тимчасових файлів, друга — компіляцію і створення JAR-архіву. Мета build залежить від clean, тому при її запуску буде спочатку виконане очищення і тільки тоді — завдання власне збирання. Build також вибрана як мета за умовчанням. Це означає, що вона буде виконана при обробці даного сценарію без явної вказівки мети.

<?xml version="1.0"?>
<project default="build">
    <!-- Build application  -->
    <target name="build" depends="clean" description="Builds the application">
        <!-- Creates directories -->
        <mkdir dir="${build.classes}"/>

        <!-- Compiles the source files -->
        <javac srcdir="${java.dir}"
               destdir="${build.classes}"
               debug="false"
               deprecation="true"
               optimize="true" >
            <classpath refid="classpath" />
        </javac>

        <!-- Copies the required files -->
        <copy todir="${build.classes}">
            <fileset dir="${java.dir}">
                <include name="**/*.properties" />
                <include name="**/*.gif" />
            </fileset>
        </copy>

        <!-- Creates the JAR-File -->
        <jar jarfile="${build.lib}/${name}.jar" manifest="${manifest}">
            <fileset dir="${build.classes}"/>
        </jar>
    </target>

    <!-- Cleans up  -->
    <target name="clean" description="Removes all temporary files">
        <!-- Erases files -->
        <delete dir="${build.dir}" />
        <delete dir="${dist.base}" />
        <delete dir="${defaultdist.dir}" />
        <delete> 
            <fileset dir="." includes="**/*~" defaultexcludes="no"/>
        </delete>
    </target>
</project>

Дивись також

ред.
  • Apache Maven — сучасніший інструмент з схожими завданнями

Посилання

ред.