Одним из принципов хорошей разработки программного обеспечения является ежедневная сборка. Если вы создаете свое программное обеспечение каждый день, то оно действует как барометр, показывающий состояние проекта. Если что-то сломано, это будет замечено быстрее, поэтому это будет исправлено быстрее. Ежедневная сборка становится сердцем проекта. Именно по этой причине Microsoft создает пять гигабайт исходного кода Windows каждый день, хотя для этого требуется двенадцать часов — на очень мощных и дорогих серверах.
Как вы можете себе представить, чтобы иметь возможность выполнять ежедневные сборки, процесс сборки должен быть автоматическим и повторяемым. Бесполезно полагаться на то, что какой-то навязчивый коллега набрал сложную команду в окне командной строки, чтобы вызвать компилятор Java с classpath, пока эта статья. Нужен еще один аккуратный инструмент в арсенале разработчика. Что нужно, так это Apache Ant.
Часть 1 этого урока начинается ниже.
Часть 2 урока начинается здесь .
О муравье
Ant — это инструмент сборки на основе Java с открытым исходным кодом от Apache Software Foundation. Он быстро стал инструментом де-факто сборки для проектов J2EE, поэтому разработчикам, по крайней мере, стоит познакомиться с основами Ant. Многие современные среды разработки Java также поддерживают Ant.
Ant использует файлы сборки, которые являются просто файлами XML, которые сообщают программе Ant, что делать. И поскольку Ant — это Java-программа, это кроссплатформенный инструмент; вы можете перемещать файлы сборки из одной операционной системы в другую без изменений, при условии, что вы не использовали никаких специфичных для платформы функций.
Хотя Ant — это инструмент для сборки, не думайте, что он хорош только для компиляции кода Java. Его имя удачно; подумайте обо всех тяжелых нагрузках, которые муравьи могут нести на своих спинах. Муравей — настоящий швейцарский армейский нож функциональности. Например, вполне возможно использовать Ant для получения последней версии кода из репозитория исходного кода, компилирования этого кода, запуска модульных тестов и создания отчета с результатами, создания документации Javadoc, упаковки кода в приложение J2EE, развертывания это приложение на сервер приложений … а затем отправьте себе электронное письмо, когда все это будет сделано. Уф! Ant может сделать все это в ответ на одну команду от вас, если вы этого хотите. Неплохо, а? Не заблуждайтесь: возможность писать и поддерживать файлы сборки Ant — очень полезный навык для любого разработчика Java.
Получить и установить муравей
Ant можно скачать со страницы загрузок на веб-сайте Apache Ant . Как и все загрузки Apache, он доступен как в двоичном (предварительно скомпилированном) виде, так и в виде исходного кода. Я рекомендую вам скачать бинарный дистрибутив, хотя бы для начала.
Найдите файл, который вы скачали, который будет называться что-то вроде apache-ant-1.6.2-bin.zip. На момент написания статьи 1.6.2 является последней версией Ant. В Ant нет программы установки, поэтому все, что вам нужно сделать, это разархивировать загрузку в каталог, в который вы хотите установить программное обеспечение, например, C: Program Files. Если вы используете WinZip для извлечения файлов из Zip-файла, убедитесь, что установлен флажок «Использовать имена папок», чтобы сохранить структуру папок установки Ant.
Прежде чем начать работу с Ant, нам нужно изменить системный путь, чтобы Ant можно было запускать из любой командной строки, независимо от того, какой каталог находится в файловой системе. Нам также нужно добавить некоторые общесистемные переменные среды, которые нужны Ant для правильной работы. Следующие инструкции предназначены для Windows XP; пользователи других операционных систем должны обратиться к своей документации, чтобы узнать, как изменить системный путь, а также добавить и редактировать переменные среды.
Щелкните правой кнопкой мыши значок «Мой компьютер» и выберите «Свойства». Затем перейдите на вкладку «Дополнительно» и нажмите кнопку «Переменные среды». В зависимости от того, являетесь ли вы администратором компьютера или нет, вы можете добавить папку установки Ant в глобальный путь (который влияет на всех пользователей) или в путь только для вашей учетной записи пользователя. Если кнопки «Создать», «Редактировать» и «Удалить» неактивны в группе «Системные переменные», у вас нет прав на изменение глобального пути, и вы можете настроить Ant только для своей учетной записи. Не волнуйтесь, все равно будет работать отлично. Давайте предположим, что вы собираетесь сделать именно это.
Если у вас еще нет пользовательской переменной с именем Path, нажмите кнопку «Создать» и задайте для имени переменной значение « Path
а для значения переменной — полный путь к папке «bin» в установке Ant, например C: Program FilesApache Groupapache- ant-1.6.2bin, затем нажмите OK. Если у вас уже есть переменная пользователя Path
, выделите ее в списке и нажмите кнопку «Изменить». Добавьте точку с запятой в конец существующего пути, затем добавьте полный путь к папке bin, как описано выше. Вы можете получить путь, который выглядит примерно так: C: Program FilesWidgetWareWidget; C: Program FilesApache Groupapache-ant-1.6.2bin
Нажмите OK, когда закончите редактирование.
Следующим шагом является настройка новой переменной среды с именем ANT_HOME
. Пока вы находитесь в диалоговом окне «Переменные среды», нажмите кнопку «Создать» в группе «Пользовательские переменные» и создайте новую переменную с именем ANT_HOME
и значением, соответствующим папке установки Ant. Например, C: Program Filesapache-ant-1.6.2 Обратите внимание, что на этот раз нет конца корзины. Нажмите ОК.
Наконец, нам нужно установить еще одну новую переменную среды: ту, которая сообщит Ant, где установлен ваш Java Development Kit (JDK). Следуйте процедуре, описанной выше для ANT_HOME
среды ANT_HOME
, но на этот раз установите для имени переменной значение JAVA_HOME
а для значения переменной — место, в котором установлен JDK. На моей машине это C: Program FilesJavajdk1.5.0, но ваша может отличаться. Теперь нажмите OK несколько раз, чтобы закрыть все открытые диалоги и листы свойств.
Вы можете подтвердить, что эти шаги были успешными, открыв Командную строку и введя set ant_home
затем Enter, а затем set java_home
и Enter. Соответствующие пути, которые вы ввели в шагах выше, должны отображаться. Если это не работает, попробуйте выйти из системы и снова войти.
Мы также должны убедиться, что Ant установлен правильно и готов к работе. В том же окне командной строки введите ant –version
нажмите Enter. Если все хорошо, Ant должен ответить, сообщив, какая это версия и когда она была скомпилирована. Если это так, то мы готовы начать больше узнавать об Ant и написать наш первый файл сборки!
Хорошие вещи приходят в тройки: проекты, цели и задачи
Три основных понятия в Ant — это проект , цели и задачи . На самом деле, есть и свойства , но кто нибудь слышал о хороших вещах, приходящих на четвереньки? Концепции действительно просты: каждый файл сборки Ant содержит один и только один проект, и этот проект должен содержать хотя бы одну цель, но обычно содержит больше. Также каждая цель содержит задачи. Давайте посмотрим на часть проекта, погрузившись в нее и начав писать файл сборки.
Используйте текстовый редактор, чтобы создать новый файл с именем build.xml и сохранить его где-нибудь. Вы можете использовать Блокнот для этой задачи, или вы можете использовать необычный редактор подсветки синтаксиса — это действительно не имеет значения. Введите или вставьте следующее:
<?xml version="1.0" encoding="UTF-8"?> <project name="helloworld" default="compile" basedir="."> <description> Build file for the Hello World application. </description> </project>
Первая строка — это просто стандартное объявление, в котором говорится, что это документ XML 1.0, в котором используется кодировка символов UTF-8. Возможно, вы уже сталкивались с этой чертой или чем-то подобным. Ant фактически не требует, чтобы это присутствовало, но это хорошая идея включить его, потому что файлы сборки Ant являются XML-документами, и действительные XML-документы должны начинаться с этого объявления.
Далее есть тег проекта с attribute
имени. Это просто имя, которое мы хотим дать проекту; в данном случае это потрясающе невообразимый "helloworld"
. Имя проекта используется, когда мы вызываем файлы сборки Ant из других файлов сборки Ant, о которых нам сейчас не нужно беспокоиться.
Атрибут по default
сообщает Ant, какую цель выполнять, если в командной строке не указана конкретная цель. Подробнее об этом позже.
Наконец, атрибут basedir
— это путь к каталогу, который Ant должен использовать при разработке путей. Чаще всего это будет установлено на .
(один период), что является сокращением для Windows и UNIX для ссылки на тот же каталог, в котором находится сам файл. Другими словами, если вы сохранили свой файл build.xml в C: SitePoint TutorialsAnt, то атрибут basedir
будет иметь значение C:SitePoint TutorialsAnt
; когда Ant определяет какие-либо относительные пути позже, он использует их в качестве отправной точки.
В тег project
вложен тег description
. Здесь вы можете предоставить более подробное описание проекта, который получит выходные данные, если человек, использующий файл сборки, запросит помощь по файлу сборки.
В настоящее время этот файл сборки не очень полезен. На самом деле, это даже не верно, потому что мы не определили никаких целей. Цель — это набор задач, которые вы хотите выполнить. Вы можете указать Ant, какие цели вы хотите выполнить, и, если цель не указана, используется цель проекта по умолчанию. Давайте заставим наш файл сборки сделать что-нибудь полезное и добавить цель:
<?xml version="1.0" encoding="UTF-8"?> <project name="helloworld" default="compile" basedir="."> <description> Build file for the Hello World application. </description> <target name="compile" description="Compile all sources."> <mkdir dir="classes" /> <javac srcdir="src" destdir="classes" /> </target> </project>
Здесь мы вложили target
тег в тег project
и установили его name
и атрибуты description
. Опять же, описание выводится, если пользователь файла сборки запрашивает помощь. Мы увидим, как это сделать позже. В target
тег вложены две задачи: mkdir
и javac
. Ant имеет больше встроенных задач, чем вы можете встряхнуть; см. онлайн-руководство, чтобы получить представление. Если этого недостаточно, вы всегда можете расширить Ant дополнительными задачами, написанными другими. Если этого все еще недостаточно, вы не только довольно требовательны, но вы всегда можете написать свои собственные задачи Ant с использованием Java (естественно).
Задача mkdir
, как следует из ее названия, создает каталог. В этом случае он делает каталог вывода classes
в который будут идти наши скомпилированные классы Java. Помните, что это происходит относительно местоположения, указанного с помощью атрибута basedir
тега project
. Итак, используя приведенный ранее пример, наша задача mkdir
создаст каталог classes
непосредственно в C: SitePoint TutorialsAnt.
Большинство файлов сборки Ant в какой-то момент будут использовать задачу javac
. Как вы уже догадались, это оболочка вокруг javac.exe — компилятора Java. В этом случае мы используем атрибут srcdir
чтобы указать ему найти исходный код Java в каталоге src
и вывести скомпилированные классы в каталог classes
.
Важно: Муравей — суровая любовница; если вы сначала не создадите каталог классов, задача javac не будет выполнена, когда она попытается вывести туда некоторые файлы. Вот почему мы должны были сначала использовать задачу mkdir.
Это оно! Мы определили нашу первую цель и использовали две встроенные задачи Ant. Если у вас есть простой исходный код Java, который не зависит от каких-либо других библиотек на пути к классам — я говорю об уровне сложности «Hello World» здесь — и этот исходный код находится в каталоге src
, тогда эта сборка Файл скомпилирует классы в каталог классов. Единственная часть Ant, которую осталось изучить, это как запустить файл сборки! Ну, не совсем. Но давайте посмотрим, как это сделать в любом случае.
Использование муравья
Как я уже говорил ранее, многие современные Java IDE имеют встроенную поддержку Ant, но прежде чем самостоятельно исследовать, работает ли ваш, давайте узнаем, как запускать Ant так, как задумано природой: из командной строки.
Откройте командную строку в каталоге, в котором сохранен ваш файл build.xml. Теперь введите ant –projecthelp
, а затем Enter. Муравей должен отображать следующую информацию:
Buildfile: build.xml Build file for the Hello World application. Main targets: compile Compiles all sources. Default target: compile
Ant сообщает нам имя файла сборки, описание проекта и предоставляет список целей в файле сборки вместе с их описаниями. Обратите внимание, что если вы не предоставите описание для цели, то эта цель вообще не будет указана как часть справки проекта. Поэтому, если вы не сможете посмотреть на источник файла сборки, вы даже не узнаете, что цель там есть.
Ant также сообщает нам, какова цель по умолчанию. В данном случае это цель compile
. Обратите внимание, что нам не нужно было сообщать Ant, как называется наш файл сборки. Ant запрограммирован на поиск файла сборки с именем build.xml в любом каталоге, в котором вы оказались при ant
команды ant
. Это не значит, что вы должны вызывать все ваши файлы сборки build.xml; это просто удобная функция. Если вы используете другое имя, вы должны использовать переключатель командной строки –f
чтобы сообщить Ant, как называется ваш файл сборки. Например, ant –f build_me.xml
.
Теперь введите ant
и нажмите Enter. Вы должны увидеть что-то похожее на следующее:
Buildfile: build.xml compile: [mkdir] Created dir: C:SitePoint TutorialsAntclasses [javac] Compiling 1 source file to C:SitePoint TutorialsAntclasses BUILD SUCCESSFUL Total time: 2 seconds
Приведенный выше код показывает, что Ant нашел build.xml и выполнил свою цель compile
умолчанию. Если вы осмотрите этот каталог классов, вы должны найти там 100% чистую Java. Поздравляем! Вы успешно использовали Ant для компиляции кода Java! Ant отображает в квадратных скобках название каждой задачи во время ее выполнения, а также услужливо сообщает нам, сколько времени заняла сборка. Это удобная функция, когда ваши сборки занимают часы, и вы хотите утомлять людей на вечеринках, рассказывая о том, насколько безумно сложен ваш проект.
Еще одна вещь, которую стоит попробовать: снова введите ant
и нажмите Enter. Вы увидите этот вывод:
Buildfile: build.xml compile: BUILD SUCCESSFUL Total time: 1 second
В этом случае Ant ничего не сделал! Он достаточно умен, чтобы понять, что код уже скомпилирован и не нуждается в повторной компиляции. Муравьиные практики создают избегание. Это означает, что он проверяет временные метки файлов, чтобы определить, изменились они или нет, и компилирует только измененные файлы, тем самым сокращая время сборки, часто радикально в больших проектах.
В первой части этой серии мы узнали, почему использование Ant для сборки является хорошей идеей, и познакомились с основными концепциями Ant проекта, целей и задач. Мы также написали и выполнили простой файл сборки.
Теперь давайте взглянем на некоторые другие способы, которыми Ant может сделать нашу жизнь как разработчиков Java проще.
Целевые зависимости
Муравьиные цели могут зависеть от других целей. Когда вы думаете об этом, это действительно очень полезно. У вас может быть цель для создания файла JAR, который зависит от цели для компиляции исходного кода. Давайте добавим еще две цели в наш файл build.xml (обратите внимание, что полная версия build.xml доступна для скачивания ):
<?xml version="1.0" encoding="UTF-8"?> <project name="helloworld" default="compile" basedir="."> <description> Build file for the Hello World application. </description> <target name="compile" description="Compile all sources."> <mkdir dir="classes" /> <javac srcdir="src" destdir="classes" /> </target> <target name="clean" description="Clean up output directories."> <delete dir="classes" /> </target> <target name="rebuild" depends="clean,compile" description="Cleanly compiles all sources." /> </project>
Я ввел новый синтаксис здесь. Давайте сначала возьмем clean
цель. Он содержит задачу delete
которая просто удаляет выходной каталог classes
и его содержимое. Задача Ant по delete
— это универсальный маленький человечек: он может удалять файлы и каталоги различными комбинациями и способами. У нас также есть цель rebuild
, которая не содержит никаких задач! Что тут происходит?
Вы заметите, что у цели rebuild
есть новый атрибут depends
установленный для clean,compile
. Это означает, что цель rebuild
должна сначала выполнить clean
цель, прежде чем она выполнит цель compile
. Таким образом, выходной каталог classes
будет удален, затем заново создан, а код Java перекомпилирован. Другими словами, происходит полная перестройка, которая полезна, когда вы хотите скомпилировать абсолютно все и убедиться, что у вас нет старых файлов классов, лежащих для классов, исходный код которых вы впоследствии удалили. Наличие устаревших классов в вашем classpath, не осознавая этого, может заставить вас тратить часы на ненужную отладку.
Важно: Ant выполняет цели только один раз, даже если от нее зависит более чем одна цель.
Запустите цель rebuild
используя ant rebuild
и просмотрите результат. Теперь мы можем выполнить чистую сборку, будучи уверенными в том, что мы используем только те классы, которые, по нашему мнению, мы используем!
СУХОЙ Используя Свойства
При программировании важно следовать принципу СУХОЙ: не повторяйте себя. Если вы зоркие, возможно, вы заметили, что в нашем файле сборки присутствует некоторое дублирование. Каталог classes
упоминается по имени три раза: дважды в цели compile
и третий раз в clean
цели. Нам нужен способ ввести некоторую косвенность, так что если мы вдруг решим, что хотим, чтобы наш скомпилированный Java-код оказался в каталоге с именем bytecode
, а не в classes
, мы должны выполнить редактирование только один раз. К счастью, у Антона есть все.
Давайте рассмотрим синтаксис. Вот как выглядит наш файл сборки, когда мы добавляем свойство для хранения имени выходного каталога:
<?xml version="1.0" encoding="UTF-8"?> <project name="webforum" default="compile" basedir="."> <description> Build file for the WebForum application. </description> <property name="classes.dir" location="classes" /> <target name="compile" description="Compile all sources."> <mkdir dir=" ${classes.dir} " /> <javac srcdir="src" destdir=" ${classes.dir} " /> </target> <target name="clean" description="Clean up output directories."> <delete dir=" ${classes.dir} " /> </target> <target name="rebuild" depends="clean,compile" description="Cleanly compiles all sources." /> </project>
Свойства — это просто пары имя / значение. В этом случае имя — classes.dir
а значение — classes
. На самом деле мы используем атрибут location
для установки последнего, потому что имеем дело с путем к файлу, который мы хотим оценить относительно значения, установленного для атрибута basedir
. Для других типов свойств используйте атрибут value
. Если вы хотите сослаться на фактическое значение, которое представляет свойство, просто используйте синтаксис ${property name}
, например, ${classes.dir}
. Если вы попытаетесь использовать файл сборки сейчас, вы должны обнаружить, что он работает точно так же, как и раньше; Важным моментом является то, что его легче поддерживать.
Давайте предположим, что по какой-то странной причине мы действительно хотели, чтобы наши скомпилированные классы помещались в каталог с именем bytecode
вместо classes
. Как бы мы этого достигли? Мы могли бы отредактировать декларацию свойства и получить выгоду от необходимости вносить изменения только в одном месте, но я хочу показать вам другой, очень мощный способ.
Ant позволяет вам переопределять свойства в командной строке. Возможно, вы сталкивались с ключом -D
Java, который позволяет вам установить системное свойство. Ant использует тот же синтаксис. Поэтому запустите ant –Dclasses.dir=bytecode rebuild
и наблюдайте за результатами.
Наши скомпилированные классы заканчиваются bytecode
вместо classes
. Вы ожидали удаления каталога classes
, потому что мы сказали Ant запустить цель rebuild
, которая, в свою очередь, вызывает clean
цель? Если это так, не забудьте помнить, что в clean
цели также указывается значение ${classes.dir}
, которое мы передали. По этой причине старый каталог classes
остается на месте. Также обратите внимание, что между параметром -D
и перезаписываемым свойством нет пробела.
Как правило, таким способом свойства будут переопределяться только в том случае, если вы хотите внести изменения только для этой сборки. Если бы мы постоянно хотели использовать байт-код вместо классов, мы бы отредактировали объявление свойства в файле сборки. Помните: хороший процесс сборки повторяется.
Сокрытие целей
Иногда, когда вы пишете файлы сборки, вы захотите скрыть цели, чтобы они не могли быть выполнены напрямую. Вы можете задаться вопросом, для чего нужна цель, если она не может быть выполнена напрямую. Что ж, полезно иметь возможность создавать так называемые внутренние цели, которые выполняют полезную работу для других видимых целей. Чтобы скрыть цель, просто поместите знак минуса перед ее именем. Добавьте выделенный код ниже в наш файл сборки:
<?xml version="1.0" encoding="UTF-8"?> <project name="helloworld" default="compile" basedir="."> <description> Build file for the Hello World application. </description> <property name="classes.dir" location="classes" /> <property name="dist.dir" location="dist" /> <property name="dist.jarfile" value="helloworld.jar" /> <target name="compile" depends="-init" description="Compile all sources."> <mkdir dir="${classes.dir}" /> <javac srcdir="src" destdir="${classes.dir}" /> </target> <target name="clean" description="Clean up output directories."> <delete dir="${classes.dir}" /> </target> <target name="rebuild" depends="clean,compile" description="Cleanly compiles all sources." /> <target name="-init"> <!-- Create the time stamp. --> <tstamp> <format property="TODAY_UK" pattern="dd MMM yyyy HH.mm" locale="en_GB" /> </tstamp> </target> <target name="dist" depends="rebuild" description="Creates the binary distribution."> <mkdir dir="${dist.dir}/${TODAY_UK}" /> <jar basedir="${classes.dir}" destfile="${dist.dir}/${TODAY_UK}/${dist.jarfile}" /> </target> </project>
Здесь довольно много изменений! Цель compile
теперь зависит от скрытой цели init
. Сам объект init
использует задачу Ant tstamp
чтобы назначить дату и метку времени новому свойству TODAY_UK
используя британский формат даты и времени. Мы будем использовать это свойство позже в файле сборки, чтобы создать новый каталог с именем, отражающим дату и время запуска сборки. Мы скрываем эту цель, потому что она сама по себе не делает ничего очень полезного, поэтому мы не хотим вызывать ее из командной строки.
Возвращаясь к началу файла сборки, мы настроили пару новых свойств, чтобы определить каталог вывода dist
и имя файла выходного файла JAR: helloworld.jar
.
Наконец, мы добавили новую цель dist
которая зависит от цели rebuild
. Наш старый друг, задача mkdir
используется снова. Он использует свойства dist.dir
и TODAY_UK
для создания выходного каталога, в который будет TODAY_UK
файл JAR.
Задача Ant jar
затем используется для создания файла JAR. Задача jar
может принимать множество различных параметров, но здесь мы устанавливаем только два из них. Атрибут basedir
указывает задаче jar
где найти скомпилированные классы Java, которые мы хотим поместить в файл JAR, а атрибут destfile
указывает имя самого выходного файла JAR.
Если вы сейчас введете ant dist
в командной строке, вы должны увидеть вывод, подобный следующему:
Buildfile: build.xml clean: [delete] Deleting directory C:SitePoint TutorialsAntclasses -init: compile: [mkdir] Created dir: C:SitePoint TutorialsAntclasses [javac] Compiling 1 source file to C:SitePoint TutorialsAntclasses rebuild: dist: [mkdir] Created dir: C:SitePoint TutorialsAntdist26 Feb 2005 12.38 [jar] Building jar: C:SitePoint TutorialsAntdist26 Feb 2005 12.38helloworld.jar BUILD SUCCESSFUL Total time: 2 seconds
Обратите внимание, что Ant прошел по дереву зависимостей, которое мы создали. Мы сказали ему выполнить цель dist
, которая зависит от цели rebuild
, которая, в свою очередь, зависит от clean
цели, за которой следует цель compile
. Сама цель compile
зависит от цели –init
. Ant автоматически распутывает все это и выполняет цели в следующем порядке: clean
, -init
, compile
, rebuild
и наконец dist
.
И последнее замечание: если вы загляните в файл helloworld.jar
который создал Ant (для этого вы можете использовать WinZip), вы увидите, что Ant автоматически добавил файл MANIFEST.MF
, который содержит краткую информацию. сборки, такие как версия Ant и компилятор Java, которые были использованы. На моей машине это выглядит так:
Manifest-Version: 1.0 Ant-Version: Apache Ant 1.6.2 Created-By: 1.5.0-b64 (Sun Microsystems Inc.)
Конечно, вы всегда можете переопределить это поведение и заставить задачу jar
Ant использовать ваш собственный файл манифеста, если вам нужно. Детали включены в документацию по Ant для задачи jar
.
Target Aliasing
Метод, который я часто использую в своих файлах сборки, — это наложение псевдонимов. Это означает, что я определяю цель, которая ничего не делает, но вызывает другую. Это может показаться пустой тратой времени, но рассмотрим сценарий предоставления цели, которая отображает пользователю простой текст справки через задачу эха Ant:
<target name="help" depends="usage" /> <target name="usage" description="Display usage information."> <echo message=" Execute 'ant -projecthelp' for build file help." /> <echo message=" Execute 'ant -help' for Ant help." /> </target>
Цель help
привязана к цели usage
путем создания зависимости от цели usage
. Теперь пользователь нашего файла сборки может получить интерактивную справку, набрав либо ant usage
либо ant help
. Обратите внимание, что цель help
не отображается в списке целей, отображаемом параметром Ant — –projecthelp
, поскольку мы не предоставили описание для него. Для дополнительного уточнения задайте цель help
или цели назначения по умолчанию, чтобы пользователь мог получить справку, если он просто ant
команду ant
без аргументов в командной строке.
Совет: Серьезно подумайте о том, чтобы сделать ваш файл сборки удобным для пользователя, сделав его целевой файл по умолчанию, который не делает ничего потенциально трудоемкого и / или опасного! Отображение справки является хорошим кандидатом по умолчанию.
Удивительный муравей
На самом деле, мы только что коснулись возможностей Ant, но я надеюсь, что я дал вам представление о том, насколько гибким и мощным он является. На самом деле, вам будет очень трудно придумать что-нибудь полезное, что вы захотите сделать в области разработки Java, с которой Ant не справится.
Стоит потратить время на просмотр списка основных задач, предлагаемых Ant, и поэкспериментировать с некоторыми из них. Если вы перейдете в папку, в которую вы установили Ant, вы найдете папку с docs
. В этом файле index.html
, который откроет вашу собственную локальную копию веб-сайта Apache Ant. Здесь содержится ссылка на локальную копию руководства по Ant, которая, как правило, хорошо написана, поскольку Ant сейчас является зрелой программой. В руководстве также есть много ссылок на некоторые замечательные внешние ресурсы по Ant. Счастливое здание!