Оригинальный автор(ы) | Джеймс Дункан Дэвидсон |
---|---|
Разработчик(и) | Фонд программного обеспечения Apache |
Первоначальный выпуск | 19 июля 2000 г. ( 2000-07-19 ) |
Стабильный релиз | 1.10.15 / 29 августа 2024 г. ( 2024-08-29 ) [1] |
Репозиторий | Репозиторий Ant |
Написано в | Ява |
Платформа | Java SE |
Тип | Инструмент сборки |
Лицензия | Лицензия Apache 2.0 |
Веб-сайт | ant.apache.org |
Apache Ant — это программный инструмент для автоматизации процессов сборки программного обеспечения для приложений Java [2] , который возник из проекта Apache Tomcat в начале 2000 года как замена инструменту сборки Make из Unix . [3] Он похож на Make, но реализован с использованием языка Java и требует платформы Java. В отличие от Make, который использует формат Makefile , Ant использует XML для описания процесса сборки кода и его зависимостей. [4]
Ant — проект с открытым исходным кодом , выпущенный Apache Software Foundation под лицензией Apache .
Ant («Another Neat Tool») [5] был задуман Джеймсом Дунканом Дэвидсоном во время подготовки эталонного движка JSP и сервлетов Sun Microsystems , позднее Apache Tomcat , к выпуску с открытым исходным кодом . Для его сборки на платформе Solaris использовалась фирменная версия Make , но в мире открытого исходного кода не было возможности контролировать, какая платформа использовалась для сборки Tomcat; поэтому Ant был создан как простой платформенно-независимый инструмент для сборки Tomcat из директив в XML-«файле сборки». Ant (версия 1.1) был официально выпущен как отдельный продукт 19 июля 2000 года.
Было сделано несколько предложений по Ant версии 2, такие как AntEater Джеймса Дункана Дэвидсона, Myrmidon Питера Дональда [6] и Mutant Коннора МакНейла, ни одно из которых не нашло широкого признания в сообществе разработчиков. [7]
В свое время (2002 год) Ant был инструментом сборки, используемым большинством проектов по разработке Java. [8] Например, большинство разработчиков Java с открытым исходным кодом включали build.xml
файлы в свои дистрибутивы. [ требуется ссылка ] Поскольку Ant сделал интеграцию тестов JUnit с процессом сборки тривиальной задачей, Ant позволил разработчикам использовать разработку через тестирование и экстремальное программирование .
В 2004 году Apache создал новый инструмент с аналогичным назначением под названием Maven .
Gradle , похожее программное обеспечение, было создано в 2008 году, но в нем, напротив, используется код Groovy (и нескольких других языков) вместо XML.
WOProject-Ant [9] — это всего лишь один из многих примеров расширения задачи, написанного для Ant. Эти расширения устанавливаются путем копирования их .jar
файлов в каталог ant lib
. После этого эти расширения задачи можно вызывать непосредственно в типичном build.xml
файле. Расширения WOProject позволяют разработчикам WebObjects использовать ant при создании своих фреймворков и приложений вместо использования пакета Xcode от Apple .
Antcontrib
[10] предоставляет набор задач, таких как условные операторы и операции над свойствами, а также другие полезные задачи. [11] [12]
Ant-contrib.unkrig.de
[13] реализует задачи и типы для сетей, пользовательских интерфейсов Swing , обработки JSON и других.
Существуют и другие расширения задач для Perforce , .NET Framework , EJB и манипуляций с файловой системой. [14]
build.xml
Ниже приведен пример файла для простого приложения Java "Hello, world". Он определяет четыре цели - clean
, [15] и clobber
, каждая из которых имеет связанное описание. Цель указывает цель как зависимость. Это говорит Ant, что перед тем, как он сможет запустить цель, он должен сначала завершить ее.compile
jar
jar
compile
jar
compile
<?xml version="1.0"?> <project name= "Hello" default= "compile" > <target name= "clean" description= "удалить промежуточные файлы" > <delete dir= "classes" /> </target> <target name= "clobber" depends= "clean" description= "удалить все файлы артефактов" > <delete file= "hello.jar" /> </target> <target name= "compile" description= "скомпилировать исходный код Java в файлы классов" > <mkdir dir= "classes" /> <javac srcdir= "." destdir= "classes" /> </target> <target name= "jar" depends= "compile" description= "создать файл Jar для приложения" > <jar destfile= "hello.jar" > <fileset dir= "classes" includes= "**/*.class" /> <manifest> <attribute name= "Main-Class" value= "HelloProgram" /> </manifest> </jar> </target> </project>
Внутри каждой цели есть действия, которые Ant должен выполнить для построения этой цели; они выполняются с помощью встроенных задач. Например, для построения compile
цели Ant должен сначала создать каталог с именем classes
(что Ant сделает только в том случае, если он еще не существует), а затем вызвать компилятор Java. Таким образом, используются задачи mkdir
и javac
. Они выполняют задачу, аналогичную утилитам командной строки с тем же именем.
Другая задача, используемая в этом примере, называется jar
:
<jar destfile= "hello.jar" >
Эта задача Ant имеет то же имя, что и обычная утилита командной строки Java, JAR, но на самом деле является вызовом встроенной поддержки файлов JAR/ZIP программы Ant. Эта деталь не имеет значения для большинства конечных пользователей, которые просто получают нужный им JAR с запрошенными ими файлами.
Многие задачи Ant делегируют свою работу внешним программам, как собственным, так и Java. Они используют собственные задачи Ant <exec>
и <java>
для настройки командных строк и обрабатывают все детали сопоставления информации в файле сборки с аргументами программы и интерпретацией возвращаемого значения. Пользователи могут увидеть, какие задачи это делают (например <csv>
, <signjar>
, , <chmod>
, <rpm>
), попытавшись выполнить задачу в системе без базовой программы на пути или без установленного полного комплекта разработки Java (JDK).
Ant предназначен для работы со всеми системами, для которых доступны среды выполнения Java. Он чаще всего используется с Windows , Linux , macOS и другими операционными системами Unix , но также использовался на других платформах, таких как OS/2, OpenVMS, Solaris , HP-UX. [16]
Ant был разработан, чтобы быть более переносимым, чем Make. [4] По сравнению с Make, Ant использует меньше платформенно-зависимых команд оболочки . Ant предоставляет встроенную функциональность, которая разработана для одинакового поведения на всех платформах. Например, в примере build.xml
файла выше, цель clean удаляет classes
каталог и все в нем. В Makefile это обычно делается с помощью команды:
rm -rf классы/
rm
— это специфичная для Unix команда, недоступная в некоторых других средах. Например, Microsoft Windows будет использовать:
rmdir /S /Q классы
В файле сборки Ant та же цель может быть достигнута с помощью встроенной команды:
<delete dir= "classes" />
Кроме того, Ant не различает прямой слеш или обратный слеш для каталогов и точку с запятой или двоеточие для разделителей пути. Он преобразует каждый из них в символ, соответствующий платформе, на которой он выполняется.
This section possibly contains original research. (September 2011) |
<javac>
, <exec>
и <java>
— используют значения по умолчанию для опций, которые не соответствуют более поздним версиям задач. Изменение этих значений по умолчанию нарушит существующие скрипты Ant.${unassigned.property}
).<for>
цикле Antcontrib свойство не может быть повторно оценено для подзначения, которое может быть частью итерации. (Некоторые сторонние расширения облегчают обходной путь; наборы задач управления потоком AntXtras предоставляют возможность переопределения курсора для циклов.)Существуют сторонние расширения Ant (называемые antlibs ), которые обеспечивают большую часть недостающей функциональности. Кроме того, интегрированная среда разработки Eclipse (IDE) может создавать и выполнять скрипты Ant, в то время как IDE NetBeans использует Ant для своей внутренней системы сборки. Поскольку обе эти IDE являются очень популярными платформами разработки, они могут значительно упростить использование Ant. (В качестве бонуса скрипты Ant, созданные NetBeans, могут использоваться вне этой IDE как автономные скрипты.)