Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Apache Ant - это программный инструмент для автоматизации процессов сборки программного обеспечения, созданный в начале 2000 года в рамках проекта Apache Tomcat в качестве замены инструмента сборки Make для Unix. Он похож на Make, но реализован с использованием языка Java и требует платформы Java. В отличие от Make, который использует формат Makefile , Ant использует XML для описания процесса сборки кода и его зависимостей.

Ant, выпущенный по лицензии Apache от Apache Software Foundation , является проектом с открытым исходным кодом .

История [ править ]

Ant ( «Другой необходимый инструмент») [2] был задуман Джеймс Дункан Дэвидсон при подготовке Sun Microsystems «ы ссылочного JSP и сервлет двигателя, позже Apache Tomcat , для выпуска в качестве открытого источника . Фирменная версия Марка была использована для создания его на Solaris платформе, но в с открытым исходным кодом мире, не было никакой возможности контролировать , какая платформа была использована для создания Tomcat; поэтому Ant был создан как простой платформенно-независимый инструмент для сборки Tomcat из директив XML-файла сборки. Ant (версия 1.1) был официально выпущен как отдельный продукт 19 июля 2000 г.

Было сделано несколько предложений для Ant версии 2, таких как AntEater от Джеймса Дункана Дэвидсона, Myrmidon от Питера Дональда [3] и Mutant от Конора Макнила, ни одно из которых не нашло широкого признания в сообществе разработчиков. [4]

Одно время (2002 г.) Ant был инструментом сборки, который использовался в большинстве проектов разработки Java. [5] Например, большинство разработчиков Java с открытым исходным кодом включили build.xmlфайлы в свой дистрибутив. [ необходима цитата ] Поскольку Ant упростил интеграцию тестов JUnit с процессом сборки, Ant упростил для желающих разработчиков внедрение разработки , управляемой тестированием , и даже экстремального программирования .

Расширения [ править ]

WOProject-Ant [6] - лишь один из многих примеров расширения задач, написанных для Ant. Эти расширения устанавливаются путем копирования их .jarфайлов в libкаталог ant . Как только это будет сделано, эти расширения задач можно будет вызывать непосредственно в типичном build.xmlфайле. Расширения WOProject позволяют разработчикам WebObjects использовать ant при создании своих фреймворков и приложений вместо использования пакета Xcode от Apple .

Antcontrib[7] предоставляет набор задач, таких как условные операторы и операции над свойствами, а также другие полезные задачи. [8]

Ant-contrib.unkrig.de[9] реализует задачи и типы для работы в сети,пользовательских интерфейсов Swing ,обработки JSON и прочего.

Существуют и другие расширения задач для Perforce , .NET Framework , EJB и манипуляций с файловой системой. [10]

Пример [ править ]

Ниже приведен пример build.xmlфайла для простого Java-приложения «Hello, world». Он определяет четыре цели - clean, clobber, compileи jar, каждый из которых имеет соответствующее описание. jarЦель перечисляет compileцели , как зависимость. Это говорит Ant, что прежде чем он сможет запустить jarцель, он должен сначала завершить compileцель.

<? xml version = "1.0"?> <project  name = "Hello"  default = "compile" >  <target  name = "clean"  description = "удалить промежуточные файлы" >  <delete  dir = "classes" />  </ target >  <target  name = "clobber" plays  = "clean"  description = "удалить все файлы артефактов" >  <delete  file = "hello.jar" />  </target>  <target  name = "compile" description = "скомпилировать исходный код Java в файлы классов" >  <mkdir  dir ="классы" />  <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, но на самом деле является вызовом встроенной в программу Ant поддержки файлов JAR / ZIP. Эта деталь не имеет отношения к большинству конечных пользователей, которые просто получают JAR, который они хотели, с файлами, которые они просили.

Многие задачи Ant делегируют свою работу внешним программам, собственным или Java. Они используют собственные задачи <exec>и <java>задачи Ant для настройки командных строк и обрабатывают все детали сопоставления информации в файле сборки с аргументами программы и интерпретации возвращаемого значения. Пользователи могут видеть , какие задачи сделать это (например <csv>, <signjar>, <chmod>, <rpm>), при попытке выполнить задачу в системе без базовой программы на пути, или без полного набора Java Development (JDK) установлен.

Переносимость [ править ]

Команда Ant намеревается заставить Ant работать на всех системах, на которых работает OpenJDK и другие среды выполнения Java с открытым исходным кодом . Разработчики, как правило, сосредотачиваются на разработке для Linux, MacOS, Microsoft Windows и Unix. Ant также успешно использовался на многих других платформах, включая OS / 2, OpenVMS, Solaris, HP-UX и т. Д. [11]

Одной из основных целей Ant было сделать его более портативным, чем Make. В Make действия, необходимые для создания цели, указываются как команды оболочки для конкретной платформы , тогда как Ant предоставляет большое количество встроенных функций, которые предназначены для одинакового поведения на всех платформах. Например, в примере build.xmlфайла выше чистая цель удаляет classesкаталог и все, что в нем. В Makefile это обычно делается с помощью команды:

rm -rf классы /

rm- это специфическая для Unix команда, недоступная в некоторых других средах. Microsoft Windows , например, будет использовать:

rmdir / S / Q классы

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

 <delete  dir = "classes" />

Кроме того, Ant не делает различий между прямой и обратной косой чертой для каталогов и точкой с запятой или двоеточием для разделителей пути. Он преобразует каждый в символ, соответствующий платформе, на которой он выполняется.

Ограничения [ править ]

  • Файлы сборки Ant, написанные в XML , могут быть сложными и подробными, поскольку они иерархичны, частично упорядочены и повсеместно связаны между собой. Эта сложность может быть препятствием для обучения. Файлы сборки больших или сложных проектов могут стать неуправляемо большими. Хороший дизайн и модульность файлов сборки могут улучшить читаемость, но не обязательно уменьшить размер. Другие инструменты сборки, такие как Gradle или Maven , используют более сжатые сценарии за счет универсальности и гибкости.
  • Многие из более старых задач - основные, которые используются каждый день, например <javac>, <exec>и <java>- используют значения по умолчанию для параметров, которые не согласуются с более поздними версиями задач. Изменение этих значений по умолчанию нарушит существующие сценарии Ant.
  • При раскрытии свойств в строке или текстовом элементе неопределенные свойства не возникают как ошибка, а остаются как нерасширенная ссылка (например, ${unassigned.property}).
  • Ant имеет ограниченные правила обработки ошибок.
  • Ленивая оценка свойств не поддерживается. Например, при работе в <for>цикле Antcontrib свойство не может быть повторно оценено на предмет подзначения , которое может быть частью итерации. (Некоторые сторонние расширения упрощают обходной путь; наборы задач управления потоком AntXtras действительно предусматривают переопределение курсора для циклов.)
  • В make-файлах любое правило для создания одного типа файла из другого может быть встроено в make-файл. Например, можно преобразовать документ в какой-либо другой формат, используя правила для выполнения другого инструмента. Создание аналогичной задачи в Ant более сложное: отдельная задача должна быть написана на Java и включена в файл сборки Ant, чтобы обрабатывать тот же тип функциональности. Однако такое разделение может улучшить читаемость сценария Ant, скрывая некоторые детали того, как задача выполняется на разных платформах.

Существуют сторонние расширения Ant (называемые antlibs ), которые обеспечивают большую часть недостающих функций. Кроме того, интегрированная среда разработки (IDE) Eclipse может создавать и выполнять сценарии Ant, в то время как IDE NetBeans использует Ant для своей внутренней системы сборки. Поскольку обе эти IDE являются очень популярными платформами разработки, они могут значительно упростить использование Ant. (В качестве бонуса сценарии Ant, созданные NetBeans, могут использоваться вне этой среды IDE как отдельные сценарии.)

См. Также [ править ]

  • Автоматизация сборки
    • Список программного обеспечения для автоматизации сборки
  • Apache Jelly , инструмент для превращения XML в исполняемый код
  • Apache Ivy , менеджер зависимостей, тесно интегрированный с Ant, подпроектом Ant.
  • Apache Maven , инструмент для управления проектами и автоматизации сборки, в первую очередь для Java.
  • Nant , Ant-подобный инструмент, ориентированный на среду .NET Framework, а не на Java.
  • Gradle , инструмент сборки JVM, созданный с помощью Groovy

Ссылки [ править ]

  1. ^ "Новости проекта Apache Ant" . Дата обращения 5 сентября 2019 .
  2. ^ «Почему вы называете это Ant? - Apache Ant FAQ» .
  3. ^ Питер Дональд. «Мирмидон: Предложение Ant2.0» .
  4. ^ Макнил, Конор. «Ранняя история развития муравьев» .
  5. Перейти ↑ Wiley (2002). Инструменты Java для экстремального программирования . п. 76.
  6. ^ "WOProject-Ant - WOProject / WOLips - Confluence" . Архивировано из оригинала на 2009-01-08.
  7. ^ "Муравей-Contrib" .
  8. ^ "Задачи Ant-Contrib" .
  9. ^ "ant-contrib.unkrig.de" .
  10. ^ «Обзор задач Ant» .
  11. ^ Руководство по Apache Ant. Раздел «Системные требования» .

Дальнейшее чтение [ править ]

  • Лафран, Стив; Хэтчер, Эрик (12 июля 2007 г.). Муравей в действии (2-е изд.). Публикации Мэннинга . п. 600. ISBN 978-1-932394-80-1.
  • Хольцнер, Стивен (13 апреля 2005 г.). Муравей - Окончательное руководство (2-е изд.). O'Reilly Media . п. 334. ISBN 978-0-596-00609-9.
  • Муди, Мэтью (16 ноября 2005 г.). Pro Apache Ant (1-е изд.). Апресс . С.  360 . ISBN 978-1-59059-559-6.
  • Белл, Алексис Т. (7 июля 2005 г.). Примечания к ANT Java: ускоренное введение в средство сборки Java ANT (1-е изд.). Virtualbookworm.com Публикация . п. 268. ISBN 978-1-58939-738-5.
  • Хэтчер, Эрик; Лафран, Стив (август 2002 г.). Разработка на Java с помощью Ant (1-е изд.). Публикации Мэннинга . С.  672 . ISBN 978-1-930110-58-8.
  • Нимейер, Гленн; Потит, Джереми (29 мая 2003 г.). Экстремальное программирование с помощью Ant: создание и развертывание приложений Java с помощью JSP, EJB, XSLT, XDoclet и JUnit (1-е изд.). Издательство САМС . п. 456. ISBN. 978-0-672-32562-5.
  • Уильямсон, Алан (1 ноября 2002 г.). Муравей - Справочник разработчика (1-е изд.). Издательство САМС . п. 456. ISBN. 978-0-672-32426-0.
  • Мацке, Бернд (сентябрь 2003 г.). ANT: Java Build Tool на практике (1-е изд.). Чарльз Ривер Медиа . С.  280 . ISBN 978-1-58450-248-7.

Внешние ссылки [ править ]

  • Официальный веб-сайт