Apache Ant
Тип | програма для автоматичного складання |
---|---|
Розробник | Apache Software Foundation |
Стабільний випуск | 1.9.3 (29 грудня 2013 ) |
Платформа | віртуальна машина 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 |
Apache Ant (англ. ant — мураха і водночас акронім — «Another Neat Tool») — java-утиліта для автоматизації процесу збирання програмного продукту.
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-класів, що реалізують певні інтерфейси.
Нижче наведено неповний перелік завдань з коротким описом. Актуальна версія програми (1.7) містить близько 150 типів завдань.
Код | Дія |
---|---|
Javac | компіляція Java-коду |
Copy | копіювання файлів |
Delete | видалення файлів і директорій |
Move | переміщення файлів і директорій |
Replace | заміщення фрагментів тексту у файлах |
JUnit | автоматичний запуск юніт-тестів |
Exec | виконання зовнішньої команди |
Zip | створення архіву у форматі Zip |
CVS | виконання CVS-команди |
відправка електронної пошти | |
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 — сучасніший інструмент з схожими завданнями