Учебники

Краткое руководство по Ant

ANT означает еще один аккуратный инструмент. Это инструмент сборки на основе Java от Apache. Прежде чем углубляться в детали Apache Ant, давайте сначала разберемся, зачем нам нужен инструмент для сборки.

Нужен инструмент для сборки

В среднем, разработчик тратит значительное количество времени на выполнение повседневных задач, таких как сборка и развертывание, которые включают в себя:

  • Компиляция кода
  • Упаковка двоичных файлов
  • Развертывание двоичных файлов на тестовом сервере
  • Тестирование изменений
  • Копирование кода из одного места в другое

Для автоматизации и упрощения вышеуказанных задач полезен Apache Ant. Это инструмент для сборки и развертывания операционной системы, который можно запустить из командной строки.

История Apache Ant

  • Муравей был создан Джеймсом Дунканом Дэвидсоном (первоначальный автор Tomcat).

  • Первоначально он использовался для сборки Tomcat и был включен в состав дистрибутива Tomcat.

  • Ant родился из-за проблем и сложностей, связанных с инструментом Apache Make.

  • Ant был объявлен независимым проектом в Apache в 2000 году. Последняя версия Apache Ant по состоянию на май 2014 года – 1.9.4.

Муравей был создан Джеймсом Дунканом Дэвидсоном (первоначальный автор Tomcat).

Первоначально он использовался для сборки Tomcat и был включен в состав дистрибутива Tomcat.

Ant родился из-за проблем и сложностей, связанных с инструментом Apache Make.

Ant был объявлен независимым проектом в Apache в 2000 году. Последняя версия Apache Ant по состоянию на май 2014 года – 1.9.4.

Особенности Apache Ant

  • Ant – самый полный из доступных инструментов сборки и развертывания Java.

  • Ant не зависит от платформы и может обрабатывать специфичные для платформы свойства, такие как разделители файлов.

  • Ant можно использовать для выполнения специфических для платформы задач, таких как изменение времени изменения файла с помощью команды «touch».

  • Сценарии Ant написаны с использованием простого XML. Если вы уже знакомы с XML, вы можете выучить Ant довольно быстро.

  • Муравей хорош в автоматизации сложных повторяющихся задач.

  • Ant поставляется с большим списком предопределенных задач.

  • Ant предоставляет интерфейс для разработки пользовательских задач.

  • Ant легко вызывается из командной строки и может интегрироваться с бесплатными и коммерческими IDE.

Ant – самый полный из доступных инструментов сборки и развертывания Java.

Ant не зависит от платформы и может обрабатывать специфичные для платформы свойства, такие как разделители файлов.

Ant можно использовать для выполнения специфических для платформы задач, таких как изменение времени изменения файла с помощью команды «touch».

Сценарии Ant написаны с использованием простого XML. Если вы уже знакомы с XML, вы можете выучить Ant довольно быстро.

Муравей хорош в автоматизации сложных повторяющихся задач.

Ant поставляется с большим списком предопределенных задач.

Ant предоставляет интерфейс для разработки пользовательских задач.

Ant легко вызывается из командной строки и может интегрироваться с бесплатными и коммерческими IDE.

Ant – Настройка среды

Apache Ant Ant распространяется по лицензии Apache Software License, полноценной лицензии с открытым исходным кодом, сертифицированной по инициативе открытого источника.

Последнюю версию Apache Ant, включая полный исходный код, файлы классов и документацию, можно найти по адресу http://ant.apache.org.

Установка Apache Ant

Предполагается, что вы уже загрузили и установили Java Development Kit (JDK) на свой компьютер. Если нет, пожалуйста, следуйте инструкциям здесь .

  • Убедитесь, что для переменной среды JAVA_HOME задана папка, в которой установлен JDK.

  • Загрузите двоичные файлы с http://ant.apache.org

  • Разархивируйте zip-файл в удобную папку c: \. используя Winzip, winRAR, 7-zip или аналогичные инструменты.

  • Создайте новую переменную среды с именем ANT_HOME, которая указывает на папку установки Ant, в данном случае это папка c: \ apache-ant-1.8.2-bin .

  • Добавьте путь к пакетному файлу Apache Ant в переменную среды PATH. В нашем случае это будет папка c: \ apache-ant-1.8.2-bin \ bin .

Убедитесь, что для переменной среды JAVA_HOME задана папка, в которой установлен JDK.

Загрузите двоичные файлы с http://ant.apache.org

Разархивируйте zip-файл в удобную папку c: \. используя Winzip, winRAR, 7-zip или аналогичные инструменты.

Создайте новую переменную среды с именем ANT_HOME, которая указывает на папку установки Ant, в данном случае это папка c: \ apache-ant-1.8.2-bin .

Добавьте путь к пакетному файлу Apache Ant в переменную среды PATH. В нашем случае это будет папка c: \ apache-ant-1.8.2-bin \ bin .

Проверка установки Apache Ant

Чтобы проверить успешную установку Apache Ant на ваш компьютер, введите в командной строке ant.

Вы должны увидеть вывод, похожий на:

C:\>ant -version
Apache Ant(TM) version 1.8.2 compiled on December 20 2010

Если вы не видите вышеприведенного вывода, убедитесь, что вы правильно выполнили шаги установки.

Установка Eclipse

В этом руководстве также рассматривается интеграция Ant с Eclipse IDE. Следовательно, если вы еще не установили Eclipse, пожалуйста, скачайте и установите Eclipse

Чтобы установить Eclipse:

  • Загрузите последние двоичные файлы Eclipse с www.eclipse.org

  • Разархивируйте двоичные файлы Eclipse в удобное место, скажем, c: \ folder

  • Запустите Eclipse из c: \ eclipse \ eclipse.exe

Загрузите последние двоичные файлы Eclipse с www.eclipse.org

Разархивируйте двоичные файлы Eclipse в удобное место, скажем, c: \ folder

Запустите Eclipse из c: \ eclipse \ eclipse.exe

Муравей – Файлы сборки

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

Для этого упражнения создайте файл build.xml в любом месте вашего компьютера со следующим содержимым:

 <? xml version = "1.0"?>
    <project name = "Hello World Project" default = "info">
    <target name = "info">
       <echo> Hello World - добро пожаловать в Apache Ant! </ echo>
    </ Цель>
 </ Проект>

Обратите внимание, что перед объявлением xml не должно быть никаких пустых строк или пробелов. Если вы разрешите их, при выполнении сборки ant появится следующее сообщение об ошибке:

Соответствие цели инструкции обработки “[xX] [mM] [lL]” не допускается. Для всех файлов сборки требуется элемент проекта и хотя бы один целевой элемент.

Элемент проекта XML имеет три атрибута:

Атрибуты Описание
название Название проекта. (Необязательный)
дефолт Цель по умолчанию для сценария сборки. Проект может содержать любое количество целей. Этот атрибут указывает, какая цель должна рассматриваться как заданная по умолчанию. (Обязательный)
имя_базовой_папки Базовый каталог (или) корневая папка для проекта. (Необязательный)

Цель – это набор задач, которые вы хотите запустить как одно целое. В нашем примере у нас есть простая цель – предоставить информационное сообщение пользователю.

Цели могут зависеть от других целей. Например, цель развертывания может зависеть от цели пакета, цель пакета может зависеть от цели компиляции и так далее. Зависимости обозначаются с помощью атрибута зависимость . Например:

 <target name = "deploy" зависит = "пакет">
   ....
 </ Цель>
 <target name = "package" зависит = "очистить, скомпилировать">
   ....
 </ Цель>
 <target name = "clean">
   ....
 </ Цель>
 <target name = "compile">
   ....
 </ Цель>

Целевой элемент имеет следующие атрибуты:

Атрибуты Описание
название Название цели (обязательно)
зависит Разделенный запятыми список всех целей, от которых зависит эта цель. (Необязательный)
описание Краткое описание цели. (необязательный)
если Позволяет выполнить цель на основе правильности условного атрибута. (необязательный)
если Добавляет цель в список зависимостей указанной точки расширения. Точка расширения похожа на цель, но не имеет никаких задач. (Необязательный)

Задача эха в приведенном выше примере является тривиальной задачей, которая печатает сообщение. В нашем примере это печатает сообщение Hello World .

Чтобы запустить файл сборки ant, откройте командную строку и перейдите в папку, где находится build.xml, и введите ant info . Вы также можете ввести муравей вместо этого. Оба будут работать, потому что информация является целью по умолчанию в файле сборки. Вы должны увидеть следующий вывод:

 C: \> муравей
 Файл сборки: C: \ build.xml

 информация: [echo] Hello World - Добро пожаловать в Apache Ant!

 СТРОИТЬ УСПЕШНО
 Общее время: 0 секунд

 C: \>

Муравей – Задача по недвижимости

Файлы сборки Ant написаны на XML, что не позволяет объявлять переменные, как на вашем любимом языке программирования. Однако, как вы могли себе представить, было бы полезно, если бы Ant разрешал объявлять такие переменные, как имя проекта, исходный каталог проекта и т. Д.

Ant использует элемент свойства, который позволяет вам указывать свойства. Это позволяет изменять свойства из одной сборки в другую или из одной среды в другую.

По умолчанию Ant предоставляет следующие предопределенные свойства, которые можно использовать в файле сборки:

свойства Описание
ant.file Полное расположение файла сборки.
ant.version Версия установки Apache Ant.
имя_базовой_папки Basedir сборки, как указано в атрибуте basedir элемента проекта .
ant.java.version Версия JDK, используемая Ant.
ant.project.name Имя проекта, указанное в атрибуте имени элемента проекта .
ant.project.default-мишени Цель по умолчанию для текущего проекта.
ant.project.invoked-мишени Разделенный запятыми список целей, которые были вызваны в текущем проекте.
ant.core.lib Полное расположение файла Ant jar.
ant.home Домашний каталог установки Ant.
ant.library.dir Домашний каталог для файлов библиотеки Ant – обычно это папка ANT_HOME / lib.

Ant также делает системные свойства (Пример: file.separator) доступными для файла сборки.

В дополнение к вышесказанному пользователь может определить дополнительные свойства, используя элемент свойства . В следующем примере показано, как определить свойство с именем sitename :

<?xml version="1.0"?>
<project name="Hello World Project" default="info">
   <property name="sitename" value="www.tutorialspoint.com"/>
   <target name="info">
      <echo>Apache Ant version is ${ant.version} - You are 
         at ${sitename} </echo>
   </target>
</project>

Запуск Ant в приведенном выше файле сборки дает следующий вывод:

C:\>ant
Buildfile: C:\build.xml

info: [echo] Apache Ant version is Apache Ant(TM) version 1.8.2  
      compiled on December 20 2010 - You are at www.tutorialspoint.com

BUILD SUCCESSFUL
Total time: 0 seconds
C:\>

Муравей – Файлы недвижимости

Установка свойств непосредственно в файле сборки – это хорошо, если вы работаете с несколькими свойствами. Однако для большого проекта имеет смысл хранить свойства в отдельном файле свойств.

Хранение свойств в отдельном файле дает следующие преимущества:

  • Это позволяет повторно использовать один и тот же файл сборки с разными настройками свойств для разных сред выполнения. Например, файл свойств сборки можно поддерживать отдельно для сред DEV, TEST и PROD.

  • Это полезно, если вы заранее не знаете значения свойства (в конкретной среде). Это позволяет выполнять сборку в других средах, где значение свойства известно.

Это позволяет повторно использовать один и тот же файл сборки с разными настройками свойств для разных сред выполнения. Например, файл свойств сборки можно поддерживать отдельно для сред DEV, TEST и PROD.

Это полезно, если вы заранее не знаете значения свойства (в конкретной среде). Это позволяет выполнять сборку в других средах, где значение свойства известно.

Не существует жесткого и быстрого правила, но обычно файл свойств называется build.properties и размещается рядом с файлом build.xml . Вы можете создать несколько файлов свойств сборки на основе сред развертывания, таких как build.properties.dev и build.properties.test.

Содержимое файла свойств сборки похоже на обычный файл свойств java. Они содержат одно свойство на строку. Каждое свойство представлено именем и парой значений. Пары имя и значение разделены знаком равенства (=). Настоятельно рекомендуется пометить свойства соответствующими комментариями. Комментарии перечислены с использованием символа хеш (#).

В следующем примере показан файл build.xml и связанный с ним файл build.properties :

build.xml

<?xml version="1.0"?>
<project name="Hello World Project" default="info">
   <property file="build.properties"/>
      <target name="info">
         <echo>Apache Ant version is ${ant.version} - You are 
            at ${sitename} </echo>
      </target>
</project>

build.properties

# The Site Name
sitename=www.tutorialspoint.com
buildversion=3.3.2

В приведенном выше примере sitename – это пользовательское свойство, которое сопоставляется с именем веб-сайта. Вы можете объявить любое количество пользовательских свойств таким способом. Другим пользовательским свойством, перечисленным в приведенном выше примере, является версия сборки , которая в данном случае относится к версии сборки.

В дополнение к вышесказанному, Ant поставляется с рядом предопределенных свойств сборки, которые перечислены в предыдущем разделе, но представлены еще раз ниже.

свойства Описание
ant.file Полное расположение файла сборки.
ant.version Версия установки Apache Ant.
имя_базовой_папки Basedir сборки, как указано в атрибуте basedir элемента проекта .
ant.java.version Версия JDK, используемая Ant.
ant.project.name Имя проекта, указанное в атрибуте имени элемента проекта .
ant.project.default-мишени Цель по умолчанию для текущего проекта.
ant.project.invoked-мишени Разделенный запятыми список целей, которые были вызваны в текущем проекте.
ant.core.lib Полное расположение файла Ant jar.
ant.home Домашний каталог установки Ant.
ant.library.dir Домашний каталог для файлов библиотеки Ant – обычно это папка ANT_HOME / lib.

В примере, представленном в этой главе, используется встроенное свойство ant.version .

Муравей – Типы данных

Ant предоставляет несколько предопределенных типов данных. Не путайте термин «типы данных» с теми, которые доступны на языке программирования, вместо этого рассматривайте их как набор сервисов, уже встроенных в продукт.

Apache Ant предоставляет следующие типы данных.

Набор файлов

Типы данных набора файлов представляют собой набор файлов. Он используется в качестве фильтра для включения или исключения файлов, которые соответствуют определенному шаблону.

Например, обратитесь к следующему коду. Здесь атрибут src указывает на исходную папку проекта.

Набор файлов выбирает все файлы .java в исходной папке, кроме тех, которые содержат слово «заглушка». Фильтр с учетом регистра применяется к набору файлов, что означает, что файл с именем Samplestub.java не будет исключен из набора файлов.

<fileset dir="${src}" casesensitive="yes">
   <include name="**/*.java"/>
   <exclude name="**/*Stub*"/>
</fileset>

Набор шаблонов

Набор шаблонов – это шаблон, который позволяет легко фильтровать файлы или папки на основе определенных шаблонов. Шаблоны могут быть созданы с использованием следующих метасимволов:

  • ? – Соответствует только одному персонажу.

  • * – соответствует нулю или множеству символов.

  • ** – рекурсивно соответствует нулю или множеству каталогов.

? – Соответствует только одному персонажу.

* – соответствует нулю или множеству символов.

** – рекурсивно соответствует нулю или множеству каталогов.

В следующем примере показано использование набора шаблонов.

<patternset id="java.files.without.stubs">
   <include name="src/**/*.java"/>
   <exclude name="src/**/*Stub*"/>
</patternset>

Затем набор шаблонов можно повторно использовать с набором файлов следующим образом:

<fileset dir="${src}" casesensitive="yes">
   <patternset refid="java.files.without.stubs"/>
</fileset>

Список файлов

Тип данных filelist похож на набор файлов, за исключением следующих отличий:

  • filelist содержит явно именованные списки файлов и не поддерживает подстановочные знаки.

  • Тип данных filelist может применяться к существующим или несуществующим файлам.

filelist содержит явно именованные списки файлов и не поддерживает подстановочные знаки.

Тип данных filelist может применяться к существующим или несуществующим файлам.

Давайте посмотрим на следующий пример типа данных filelist. Здесь атрибут webapp.src.folder указывает на исходную папку веб-приложения проекта.

<filelist id="config.files" dir="${webapp.src.folder}">
   <file name="applicationConfig.xml"/>
   <file name="faces-config.xml"/>
   <file name="web.xml"/>
   <file name="portlet.xml"/>
</filelist>

Набор фильтров

Используя тип данных набора фильтров вместе с задачей копирования, вы можете заменить определенный текст во всех файлах, который соответствует шаблону, значением замены.

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

<copy todir="${output.dir}">
   <fileset dir="${releasenotes.dir}" includes="**/*.txt"/>
   <filterset>
      <filter token="VERSION" value="${current.version}"/>
   </filterset>
</copy>

В этом кодексе:

  • Атрибут output.dir указывает на выходную папку проекта.

  • Атрибут releasenotes.dir указывает на папку с заметками о выпуске проекта.

  • Атрибут current.version указывает на папку текущей версии проекта.

  • Задача копирования, как следует из названия, используется для копирования файлов из одного места в другое.

Атрибут output.dir указывает на выходную папку проекта.

Атрибут releasenotes.dir указывает на папку с заметками о выпуске проекта.

Атрибут current.version указывает на папку текущей версии проекта.

Задача копирования, как следует из названия, используется для копирования файлов из одного места в другое.

Дорожка

Тип данных пути обычно используется для представления пути к классам. Записи в пути разделяются точкой с запятой или двоеточием. Однако эти символы заменяются во время выполнения символом-разделителем пути исполняющей системы.

В качестве пути к классу указывается список jar-файлов и классов в проекте, как показано в примере ниже.

<path id="build.classpath.jar">
   <pathelement path="${env.J2EE_HOME}/${j2ee.jar}"/>
   <fileset dir="lib">
      <include name="**/*.jar"/>
   </fileset>
</path>

В этом коде:

  • Атрибут env.J2EE_HOME указывает на переменную среды J2EE_HOME .

  • Атрибут j2ee.jar указывает на имя файла jar J2EE в базовой папке J2EE.

Атрибут env.J2EE_HOME указывает на переменную среды J2EE_HOME .

Атрибут j2ee.jar указывает на имя файла jar J2EE в базовой папке J2EE.

Ant – Строительные проекты

Теперь, когда мы узнали о типах данных в Ant, пришло время применить эти знания в действии. Мы будем строить проект в этой главе. Цель этой главы – создать файл Ant, который компилирует классы java и помещает их в папку WEB-INF \ classes.

Рассмотрим следующую структуру проекта:

  • Скрипты базы данных хранятся в папке db .

  • Исходный код Java хранится в папке src .

  • Изображения, js, META-INF, стили (css) хранятся в папке war .

  • JSP хранятся в папке jsp .

  • JAR-файлы сторонних производителей хранятся в папке lib .

  • Файлы классов Java хранятся в папке WEB-INF \ classes .

Скрипты базы данных хранятся в папке db .

Исходный код Java хранится в папке src .

Изображения, js, META-INF, стили (css) хранятся в папке war .

JSP хранятся в папке jsp .

JAR-файлы сторонних производителей хранятся в папке lib .

Файлы классов Java хранятся в папке WEB-INF \ classes .

Этот проект формирует приложение Hello World Fax для оставшейся части этого урока.

C:\work\FaxWebApplication>tree
Folder PATH listing
Volume serial number is 00740061 EC1C:ADB1
C:.
+---db
+---src
.  +---faxapp
.  +---dao
.  +---entity
.  +---util
.  +---web
+---war
   +---images
   +---js
   +---META-INF
   +---styles
   +---WEB-INF
      +---classes
      +---jsp
      +---lib

Вот build.xml, необходимый для этого проекта. Давайте рассмотрим это по частям.

<?xml version="1.0"?>
<project name="fax" basedir="." default="build">
   <property name="src.dir" value="src"/>
   <property name="web.dir" value="war"/>
   <property name="build.dir" value="${web.dir}/WEB-INF/classes"/>
   <property name="name" value="fax"/>

   <path id="master-classpath">
      <fileset dir="${web.dir}/WEB-INF/lib">
         <include name="*.jar"/>
      </fileset>
      <pathelement path="${build.dir}"/>
   </path>

   <target name="build" description="Compile source tree java files">
      <mkdir dir="${build.dir}"/>
      <javac destdir="${build.dir}" source="1.5" target="1.5">
         <src path="${src.dir}"/>
         <classpath refid="master-classpath"/>
      </javac>
   </target>
 
   <target name="clean" description="Clean output directories">
      <delete>
         <fileset dir="${build.dir}">
            <include name="**/*.class"/>
         </fileset>
      </delete>
   </target>
</project>

Во-первых, давайте объявим некоторые свойства для папок source, web и build.

<property name="src.dir" value="src"/>
<property name="web.dir" value="war"/>
<property name="build.dir" value="${web.dir}/WEB-INF/classes"/>

В этом примере:

  • src.dir ссылается на исходную папку проекта, где можно найти исходные файлы Java.

  • web.dir – это папка с исходным веб- сайтом проекта, в которой вы можете найти файлы JSP, web.xml, css, javascript и другие файлы, относящиеся к сети.

  • build.dir ссылается на выходную папку компиляции проекта.

src.dir ссылается на исходную папку проекта, где можно найти исходные файлы Java.

web.dir – это папка с исходным веб- сайтом проекта, в которой вы можете найти файлы JSP, web.xml, css, javascript и другие файлы, относящиеся к сети.

build.dir ссылается на выходную папку компиляции проекта.

Свойства могут ссылаться на другие свойства. Как показано в приведенном выше примере, свойство build.dir ссылается на свойство web.dir .

В этом примере src.dir ссылается на исходную папку проекта.

Целью по умолчанию нашего проекта является цель компиляции . Но сначала давайте посмотрим на чистую цель.

Чистая цель, как следует из названия, удаляет файлы в папке сборки.

<target name="clean" description="Clean output directories">
   <delete>
      <fileset dir="${build.dir}">
         <include name="**/*.class"/>
      </fileset>
   </delete>
</target>

Мастер-путь к классам содержит информацию о пути к классам. В этом случае он включает в себя классы в папке сборки и файлы jar в папке lib.

<path id="master-classpath">
   <fileset dir="${web.dir}/WEB-INF/lib">
      <include name="*.jar"/>
   </fileset>
   <pathelement path="${build.dir}"/>
</path>

Наконец, цель сборки для сборки файлов. Прежде всего, мы создаем каталог сборки, если он не существует. Затем мы выполняем команду javac (определяя jdk1.5 в качестве нашей целевой компиляции). Мы поставляем исходную папку и путь к классам для задачи javac и просим ее удалить файлы классов в папке сборки.

<target name="build" description="Compile main source tree java files">
   <mkdir dir="${build.dir}"/>
   <javac destdir="${build.dir}" source="1.5" target="1.5" debug="true"
      deprecation="false" optimize="false" failonerror="true">
      <src path="${src.dir}"/>
      <classpath refid="master-classpath"/>
   </javac>
</target>

Выполнение Ant для этого файла компилирует исходные файлы java и помещает классы в папку сборки.

Следующий результат является результатом запуска файла Ant:

C:\>ant
Buildfile: C:\build.xml

BUILD SUCCESSFUL
Total time: 6.3 seconds

Файлы скомпилированы и помещены в папку build.dir .

Ant – Сборка документации

Документация обязательна в любом проекте. Документация играет большую роль в поддержании проекта. Java облегчает документирование благодаря использованию встроенного инструмента javadoc . Ant делает это еще проще, генерируя документацию по запросу.

Как вы знаете, инструмент javadoc обладает высокой гибкостью и позволяет использовать несколько параметров конфигурации. Ant предоставляет эти параметры конфигурации через задачу javadoc. Если вы не знакомы с javadocs, рекомендуем начать с этого учебного руководства по документации по Java .

В следующем разделе перечислены наиболее часто используемые параметры javadoc, которые используются в Ant.

Атрибуты

Источник может быть указан с использованием sourcepath , sourcepathref или sourcefiles .

  • sourcepath используется для указания на папку с исходными файлами (например, папка src).

  • sourcepathref используется для ссылки на путь, на который ссылается атрибут пути (например, Delegates.src.dir).

  • Исходные файлы используются, когда вы хотите указать отдельные файлы в виде списка через запятую.

sourcepath используется для указания на папку с исходными файлами (например, папка src).

sourcepathref используется для ссылки на путь, на который ссылается атрибут пути (например, Delegates.src.dir).

Исходные файлы используются, когда вы хотите указать отдельные файлы в виде списка через запятую.

Путь назначения указывается с помощью папки destdir (например, build.dir).

Вы можете отфильтровать задачу javadoc , указав имена пакетов, которые будут включены. Это достигается с помощью атрибута packagenames , списка файлов пакетов, разделенных запятыми.

Вы можете отфильтровать процесс javadoc для отображения только открытых, закрытых, пакетных или защищенных классов и членов. Это достигается с помощью атрибутов private , public , package и protected .

Вы также можете указать задаче javadoc включить информацию об авторе и версии, используя соответствующие атрибуты.

Вы также можете сгруппировать пакеты вместе, используя атрибут group , чтобы стало легче ориентироваться.

Собираем все вместе

Давайте продолжим нашу тему приложения Hello world Fax. Давайте добавим цель документации в наш проект приложения Fax.

Ниже приведен пример задачи javadoc, используемой в нашем проекте. В этом примере мы указали javadoc для использования src.dir в качестве исходного каталога и doc в качестве цели.

Мы также настроили заголовок окна, заголовок и информацию нижнего колонтитула, которые появляются на страницах документации Java.

Также мы создали три группы:

  • один для служебных классов в нашей исходной папке,
  • один для классов пользовательских интерфейсов, и
  • один для классов, связанных с базой данных.

Вы можете заметить, что в группе пакетов данных есть два пакета – faxapp.entity и faxapp.dao.

<target name="generate-javadoc">
   <javadoc packagenames="faxapp.*" sourcepath="${src.dir}" 
      destdir="doc" version="true" windowtitle="Fax Application">
      <doctitle><![CDATA[= Fax Application =]]></doctitle>
      <bottom>
         <![CDATA[Copyright © 2011. All Rights Reserved.]]>
      </bottom>
      <group title="util packages" packages="faxapp.util.*"/>
      <group title="web packages" packages="faxapp.web.*"/>
      <group title="data packages" 
         packages="faxapp.entity.*:faxapp.dao.*"/>
   </javadoc>
   <echo message="java doc has been generated!" />
</target>

Давайте выполним задачу Ant для javadoc. Он генерирует и размещает файлы документации java в папке doc.

Когда цель javadoc выполнена, она дает следующий результат:

C:\>ant generate-javadoc
Buildfile: C:\build.xml

java doc has been generated!

BUILD SUCCESSFUL
Total time: 10.63 second

Файлы документации java теперь присутствуют в папке doc .

Как правило, файлы javadoc создаются как часть целей выпуска или пакета.

Ant – Создание JAR-файлов

Следующий логический шаг после компиляции ваших исходных файлов java – это создание java-архива, то есть файла JAR. Создать JAR-файлы с помощью Ant довольно просто с помощью задачи jar . Обычно используемые атрибуты задачи jar:

Атрибуты Описание
имя_базовой_папки Базовый каталог для выходного файла JAR. По умолчанию это установлено в базовый каталог проекта.
компресс Советует Ant сжать файл при создании файла JAR.
keepcompression Хотя атрибут compress применим к отдельным файлам, атрибут keepcompression делает то же самое, но он применяется ко всему архиву.
DestFile Имя выходного файла JAR.
дублировать Консультирует Ant о том, что делать, если найдены дубликаты файлов. Вы можете добавить, сохранить или отключить дубликаты файлов.
исключает Советует Ant не включать эти файлы в пакет, разделенные запятыми.
excludesfile То же, что и выше, за исключением того, что исключаемые файлы указываются с использованием шаблона.
включает все Инверсия исключает.
includesfile Инверсия исключающего файла.
Обновить Советует Ant перезаписывать файлы в уже созданном файле JAR.

Продолжая наш проект приложения Hello World Fax, давайте добавим новую цель для создания файлов jar. Но перед этим давайте рассмотрим задачу jar, приведенную ниже.

<jar destfile="${web.dir}/lib/util.jar"
   basedir="${build.dir}/classes"
   includes="faxapp/util/**"
   excludes="**/Test.class"
/>

Здесь свойство web.dir указывает путь к исходным веб-файлам. В нашем случае именно здесь будет расположен файл util.jar.

Свойство build.dir в этом примере указывает на папку сборки, в которой можно найти файлы классов для util.jar.

В этом примере мы создаем файл jar с именем util.jar, используя классы из пакета faxapp.util. * . Однако мы исключаем классы, которые заканчиваются именем Test. Выходной файл JAR будет помещен в папку lib веб-приложения.

Если мы хотим сделать util.jar исполняемым jar-файлом, нам нужно добавить манифест с метаатрибутом Main-Class .

Поэтому приведенный выше пример будет обновлен как:

<jar destfile="${web.dir}/lib/util.jar"
   basedir="${build.dir}/classes"
   includes="faxapp/util/**"
   excludes="**/Test.class">
   <manifest>
      <attribute name="Main-Class" value="com.tutorialspoint.util.FaxUtil"/>
   </manifest>
</jar>

Чтобы выполнить задачу jar, оберните ее внутри цели, чаще всего, цели сборки или пакета, и выполните их.

<target name="build-jar">
<jar destfile="${web.dir}/lib/util.jar"
   basedir="${build.dir}/classes"
   includes="faxapp/util/**"
   excludes="**/Test.class">
   <manifest>
      <attribute name="Main-Class" value="com.tutorialspoint.util.FaxUtil"/>
   </manifest>
</jar>
</target>

Запуск Ant для этого файла создает для нас файл util.jar.

Следующий результат является результатом запуска файла Ant:

C:\>ant build-jar
Buildfile: C:\build.xml

BUILD SUCCESSFUL
Total time: 1.3 seconds

Файл util.jar теперь помещен в выходную папку.

Ant – Создание WAR-файлов

Создание WAR-файлов с помощью Ant чрезвычайно просто и очень похоже на задачу создания JAR-файлов. В конце концов, WAR-файл, как и JAR-файл, является просто еще одним ZIP-файлом.

Задача WAR является расширением задачи JAR, но в ней есть несколько приятных дополнений для управления содержимым папки WEB-INF / classes и создания файла web.xml. Задача WAR полезна для указания конкретного макета файла WAR.

Поскольку задача WAR является расширением задачи JAR, все атрибуты задачи JAR применяются к задаче WAR.

Атрибуты Описание
webxml Путь к файлу web.xml
Lib Группировка для указания того, что входит в папку WEB-INF \ lib.
классы Группировка для указания того, что входит в папку WEB-INF \ classes.
metainf Указывает инструкции для генерации файла MANIFEST.MF.

Продолжая наш проект приложения Hello World Fax, давайте добавим новую цель для создания файлов jar. Но перед этим рассмотрим задачу войны. Рассмотрим следующий пример:

<war destfile="fax.war" webxml="${web.dir}/web.xml">
   <fileset dir="${web.dir}/WebContent">
      <include name="**/*.*"/>
   </fileset>
   <lib dir="thirdpartyjars">
      <exclude name="portlet.jar"/>
   </lib>
   <classes dir="${build.dir}/web"/>
</war>

Как и в предыдущих примерах, переменная web.dir ссылается на исходную веб-папку, т. Е. На папку, содержащую файлы JSP, css, javascript и т. Д.

Переменная build.dir относится к выходной папке. Здесь можно найти классы для пакета WAR. Как правило, классы будут упакованы в папку WEB-INF / classes файла WAR.

В этом примере мы создаем файл войны с именем fax.war. Файл WEB.XML получен из папки веб-источника. Все файлы из папки «WebContent» в Интернете копируются в файл WAR.

Папка WEB-INF / lib заполняется файлами jar из папки thirdpartyjars. Однако мы исключаем portlet.jar, так как он уже присутствует в папке lib сервера приложений. Наконец, мы копируем все классы из веб-папки каталога сборки и помещаем в папку WEB-INF / classes.

Оберните военное задание внутри цели Ant (обычно в пакете) и запустите ее. Это создаст файл WAR в указанном месте.

Вполне возможно вложить директоры классов, lib, metainf и webinf так, чтобы они находились в отдельных папках в любом месте структуры проекта. Но лучшие практики предполагают, что ваш веб-проект должен иметь структуру веб-контента, аналогичную структуре файла WAR. Проект приложения факса имеет структуру, основанную на этом базовом принципе.

Чтобы выполнить военное задание, оберните его внутри цели, чаще всего цели сборки или пакета, и запустите их.

<target name="build-war">
   <war destfile="fax.war" webxml="${web.dir}/web.xml">
   <fileset dir="${web.dir}/WebContent">
      <include name="**/*.*"/>
   </fileset>
   <lib dir="thirdpartyjars">
      <exclude name="portlet.jar"/>
   </lib>
   <classes dir="${build.dir}/web"/>
   </war>
</target>

Запуск Ant для этого файла создаст для нас файл fax.war .

Следующий результат является результатом запуска файла Ant:

C:\>ant build-war
Buildfile: C:\build.xml

BUILD SUCCESSFUL
Total time: 12.3 seconds

Файл fax.war теперь помещен в выходную папку. Содержимое файла войны будет:

fax.war:
   +---jsp             This folder contains the jsp files
   +---css             This folder contains the stylesheet files
   +---js              This folder contains the javascript files
   +---images          This folder contains the image files
   +---META-INF        This folder contains the Manifest.Mf
   +---WEB-INF
      +---classes   This folder contains the compiled classes
      +---lib       Third party libraries and the utility jar files
      WEB.xml       Configuration file that defines the WAR package

Ant – Упаковка

Мы изучили различные аспекты Ant с помощью веб-приложения Hello World Fax по частям.

Теперь пришло время собрать все воедино, чтобы создать полный и полный файл build.xml. Рассмотрим файлы build.properties и build.xml следующим образом:

build.properties

deploy.path=c:\tomcat6\webapps

build.xml

<?xml version="1.0"?>

<project name="fax" basedir="." default="usage">
   <property file="build.properties"/>
   <property name="src.dir" value="src"/>
   <property name="web.dir" value="war"/>
   <property name="javadoc.dir" value="doc"/>
   <property name="build.dir" value="${web.dir}/WEB-INF/classes"/>
   <property name="name" value="fax"/>

   <path id="master-classpath">
      <fileset dir="${web.dir}/WEB-INF/lib">
         <include name="*.jar"/>
      </fileset>
      <pathelement path="${build.dir}"/>
   </path>
    
   <target name="javadoc">
      <javadoc packagenames="faxapp.*" sourcepath="${src.dir}" 
         destdir="doc" version="true" windowtitle="Fax Application">
      <doctitle><![CDATA[<h1>= Fax Application =</h1>]]>
      </doctitle>
      <bottom><![CDATA[Copyright © 2011. All Rights Reserved.]]>
      </bottom>
      <group title="util packages" packages="faxapp.util.*"/>
      <group title="web packages" packages="faxapp.web.*"/> 
      <group title="data packages" 
         packages="faxapp.entity.*:faxapp.dao.*"/>
      </javadoc>
   </target>

   <target name="usage">
      <echo message=""/>
      <echo message="${name} build file"/>
      <echo message="-----------------------------------"/>
      <echo message=""/>
      <echo message="Available targets are:"/>
      <echo message=""/>
      <echo message="deploy    --> Deploy application as directory"/>
      <echo message="deploywar --> Deploy application as a WAR file"/>
      <echo message=""/>
   </target>

   <target name="build" description="Compile main 
      source tree java files">
   <mkdir dir="${build.dir}"/>
      <javac destdir="${build.dir}" source="1.5" 
         target="1.5" debug="true"
         deprecation="false" optimize="false" failonerror="true">
      <src path="${src.dir}"/>
      <classpath refid="master-classpath"/>
      </javac>
   </target>

   <target name="deploy" depends="build" 
      description="Deploy application">
   <copy todir="${deploy.path}/${name}" 
      preservelastmodified="true">
      <fileset dir="${web.dir}">
         <include name="**/*.*"/>
      </fileset>
   </copy>
   </target>

   <target name="deploywar" depends="build" 
      description="Deploy application as a WAR file">
      <war destfile="${name}.war"
         webxml="${web.dir}/WEB-INF/web.xml">
         <fileset dir="${web.dir}">
            <include name="**/*.*"/>
         </fileset>
      </war>
      <copy todir="${deploy.path}" preservelastmodified="true">
         <fileset dir=".">
            <include name="*.war"/>
         </fileset>
      </copy>
   </target>
    

   <target name="clean" description="Clean output directories">
      <delete>
         <fileset dir="${build.dir}">
            <include name="**/*.class"/>
         </fileset>
      </delete>
   </target>
</project>

В этом примере:

  • Сначала мы объявляем путь к папке webapps в Tomcat в файле свойств сборки как переменную deploy.path .

  • Мы также объявляем исходную папку для java-файлов в переменной src.dir .

  • Затем мы объявляем исходную папку для веб-файлов в переменной web.dir . javadoc.dir – это папка для хранения документации java, а build.dir – это путь для хранения выходных файлов сборки.

  • Затем мы объявляем название веб-приложения, в нашем случае это факс .

  • Мы также определяем путь мастер-класса, который содержит файлы JAR, присутствующие в папке WEB-INF / lib проекта.

  • Мы также включаем файлы классов, присутствующие в build.dir, в путь мастер-класса.

  • Цель Javadoc создает Javadoc, необходимый для проекта, а цель использования используется для печати общих целей, присутствующих в файле сборки.

Сначала мы объявляем путь к папке webapps в Tomcat в файле свойств сборки как переменную deploy.path .

Мы также объявляем исходную папку для java-файлов в переменной src.dir .

Затем мы объявляем исходную папку для веб-файлов в переменной web.dir . javadoc.dir – это папка для хранения документации java, а build.dir – это путь для хранения выходных файлов сборки.

Затем мы объявляем название веб-приложения, в нашем случае это факс .

Мы также определяем путь мастер-класса, который содержит файлы JAR, присутствующие в папке WEB-INF / lib проекта.

Мы также включаем файлы классов, присутствующие в build.dir, в путь мастер-класса.

Цель Javadoc создает Javadoc, необходимый для проекта, а цель использования используется для печати общих целей, присутствующих в файле сборки.

В приведенном выше примере показаны две цели развертывания: deploy и deploywar.

Цель развертывания копирует файлы из веб-каталога в каталог развертывания, сохраняя отметку даты последнего изменения времени. Это полезно при развертывании на сервере, который поддерживает горячее развертывание.

Чистая цель очищает все ранее созданные файлы.

Цель deploywar создает файл war, а затем копирует файл war в каталог deploy сервера приложений.

Ant – Развертывание приложений

В предыдущей главе мы узнали, как упаковать приложение и развернуть его в папке.

В этой главе мы собираемся развернуть веб-приложение непосредственно в папке развертывания сервера приложений, а затем добавим несколько целей Ant для запуска и остановки служб. Давайте продолжим работу с факс-веб-приложением Hello World . Это продолжение предыдущей главы, новые компоненты выделены жирным шрифтом.

build.properties

# Ant properties for building the springapp

appserver.home=c:\\install\\apache-tomcat-7.0.19
# for Tomcat 5 use $appserver.home}/server/lib
# for Tomcat 6 use $appserver.home}/lib
appserver.lib=${appserver.home}/lib

deploy.path=${appserver.home}/webapps

tomcat.manager.url=http://www.tutorialspoint.com:8080/manager
tomcat.manager.username=tutorialspoint
tomcat.manager.password=secret

build.xml

<?xml version="1.0"?>

<project name="fax" basedir="." default="usage">
   <property file="build.properties"/>
   <property name="src.dir" value="src"/>
   <property name="web.dir" value="war"/>
   <property name="javadoc.dir" value="doc"/>
   <property name="build.dir" value="${web.dir}/WEB-INF/classes"/>
   <property name="name" value="fax"/>

   <path id="master-classpath">
      <fileset dir="${web.dir}/WEB-INF/lib">
         <include name="*.jar"/>
      </fileset>
   <pathelement path="${build.dir}"/>
   </path>
    
   <target name="javadoc">
   <javadoc packagenames="faxapp.*" sourcepath="${src.dir}" 
      destdir="doc" version="true" windowtitle="Fax Application">
      <doctitle><![CDATA[<h1>= Fax Application 
         =</h1>]]></doctitle>
      <bottom><![CDATA[Copyright © 2011. All 
         Rights Reserved.]]></bottom>
      <group title="util packages" packages="faxapp.util.*"/>
      <group title="web packages" packages="faxapp.web.*"/>
      <group title="data packages" packages="faxapp.entity.*:faxapp.dao.*"/>
   </javadoc>
   </target>

   <target name="usage">
   <echo message=""/>
   <echo message="${name} build file"/>
   <echo message="-----------------------------------"/>
   <echo message=""/>
   <echo message="Available targets are:"/>
   <echo message=""/>
   <echo message="deploy    --> Deploy application as directory"/>
   <echo message="deploywar --> Deploy application as a WAR file"/>
   <echo message=""/>
   </target>

   <target name="build" description="Compile main 
      source tree java files">
   <mkdir dir="${build.dir}"/>
   <javac destdir="${build.dir}" source="1.5" target="1.5" debug="true"
      deprecation="false" optimize="false" failonerror="true">
      <src path="${src.dir}"/>
      <classpath refid="master-classpath"/>
   </javac>
   </target>

   <target name="deploy" depends="build" description="Deploy application">
      <copy todir="${deploy.path}/${name}" 
         preservelastmodified="true">
         <fileset dir="${web.dir}">
            <include name="**/*.*"/>
         </fileset>
      </copy>
   </target>

   <target name="deploywar" depends="build" 
      description="Deploy application as a WAR file">
      <war destfile="${name}.war"
         webxml="${web.dir}/WEB-INF/web.xml">
         <fileset dir="${web.dir}">
            <include name="**/*.*"/>
         </fileset>
      </war>
      <copy todir="${deploy.path}" preservelastmodified="true">
         <fileset dir=".">
            <include name="*.war"/>
         </fileset>
      </copy>
   </target>
    

   <target name="clean" description="Clean output directories">
      <delete>
         <fileset dir="${build.dir}">
            <include name="**/*.class"/>
         </fileset>
      </delete>
   </target>
<!-- ============================================================ -->
<!-- Tomcat tasks -->
<!-- ============================================================ -->

<path id="catalina-ant-classpath">
<!-- We need the Catalina jars for Tomcat -->
<!--  * for other app servers - check the docs -->
   <fileset dir="${appserver.lib}">
      <include name="catalina-ant.jar"/>
   </fileset>
</path>

<taskdef name="install" classname="org.apache.catalina.ant.InstallTask">
   <classpath refid="catalina-ant-classpath"/>
</taskdef>
<taskdef name="reload" classname="org.apache.catalina.ant.ReloadTask">
   <classpath refid="catalina-ant-classpath"/>
</taskdef>
<taskdef name="list" classname="org.apache.catalina.ant.ListTask">
   <classpath refid="catalina-ant-classpath"/>
</taskdef>
<taskdef name="start" classname="org.apache.catalina.ant.StartTask">
   <classpath refid="catalina-ant-classpath"/>
</taskdef>
<taskdef name="stop" classname="org.apache.catalina.ant.StopTask">
   <classpath refid="catalina-ant-classpath"/>
</taskdef>

<target name="reload" description="Reload application in Tomcat">
   <reload url="${tomcat.manager.url}"username="${tomcat.manager.username}"
      password="${tomcat.manager.password}" path="/${name}"/>
</target>
</project>

В этом примере мы использовали Tomcat в качестве сервера приложений. Во-первых, в файле свойств сборки мы определили некоторые дополнительные свойства.

  • Appserver.home указывает путь установки к серверу приложений Tomcat.

  • Appserver.lib указывает на файлы библиотеки в папке установки Tomcat.

  • Переменная deploy.path теперь указывает на папку веб-приложения в Tomcat.

Appserver.home указывает путь установки к серверу приложений Tomcat.

Appserver.lib указывает на файлы библиотеки в папке установки Tomcat.

Переменная deploy.path теперь указывает на папку веб-приложения в Tomcat.

Приложения в Tomcat можно остановить и запустить с помощью приложения менеджера Tomcat. URL-адрес приложения-менеджера, имя пользователя и пароль также указываются в файле build.properties. Далее мы объявляем новый CLASSPATH, который содержит catalina-ant.jar . Этот jar-файл необходим для выполнения задач Tomcat через Apache Ant.

Catalina-ant.jar предоставляет следующие задачи:

свойства Описание
InstallTask Устанавливает веб-приложение. Имя класса: org.apache.catalina.ant.InstallTask
ReloadTask Перезагрузите веб-приложение. Имя класса: org.apache.catalina.ant.ReloadTask
ListTask Перечисляет все веб-приложения. Имя класса: org.apache.catalina.ant.ListTask
StartTask Запускает веб-приложение. Имя класса: org.apache.catalina.ant.StartTask
StopTask Останавливает веб-приложение. Имя класса: org.apache.catalina.ant.StopTask
ReloadTask Перезагрузка веб-приложения без остановки. Имя класса: org.apache.catalina.ant.ReloadTask

Задача перезагрузки требует следующих дополнительных параметров:

  • URL к менеджеру приложения
  • Имя пользователя для перезапуска веб-приложения
  • Пароль для перезапуска веб-приложения
  • Имя веб-приложения для перезапуска

Давайте выполним команду deploy-war, чтобы скопировать веб-приложение в папку веб-приложений Tomcat, а затем перезагрузим веб-приложение Fax. Следующий результат является результатом запуска файла Ant:

C:\>ant deploy-war
Buildfile: C:\build.xml

BUILD SUCCESSFUL
Total time: 6.3 seconds

C:\>ant reload
Buildfile: C:\build.xml

BUILD SUCCESSFUL
Total time: 3.1 seconds

После запуска вышеуказанной задачи веб-приложение развертывается и веб-приложение перезагружается.

Ant – Выполнение кода Java

Вы можете использовать Ant для выполнения кода Java. В следующем примере класс java принимает аргумент (адрес электронной почты администратора) и отправляет электронное письмо.

public class NotifyAdministrator
{
   public static void main(String[] args)
   {
      String email = args[0];
      notifyAdministratorviaEmail(email);
      System.out.println("Administrator "+email+" has been notified");
   }
   public static void notifyAdministratorviaEmail(String email
   { 
	   //......
   }
}

Вот простая сборка, которая выполняет этот класс Java.

<?xml version="1.0"?>
<project name="sample" basedir="." default="notify">
   <target name="notify">
      <java fork="true" failonerror="yes" classname="NotifyAdministrator">
         <arg line="admin@test.com"/>
      </java>
   </target>
</project>

Когда сборка выполняется, она дает следующий результат:

C:\>ant
Buildfile: C:\build.xml

notify: [java] Administrator admin@test.com has been notified

BUILD SUCCESSFUL
Total time: 1 second

В этом примере Java-код делает простую вещь – отправить электронное письмо. Мы могли бы использовать встроенную задачу Ant для этого. Однако теперь, когда у вас есть идея, вы можете расширить свой файл сборки для вызова Java-кода, который выполняет сложные вещи, например: шифрует ваш исходный код.

Ant – Eclipse Integration

Если вы уже загрузили и установили Eclipse, вам мало что нужно сделать, чтобы начать. Eclipse поставляется в комплекте с плагином Ant, готовым к использованию.

Следуйте простым шагам, чтобы интегрировать Ant в Eclipse.

  • Убедитесь, что build.xml является частью вашего Java-проекта и не находится в расположении, внешнем по отношению к проекту.

  • Включите Ant View, выбрав Window> Show View> Other> Ant> Ant.

  • Откройте Project Explorer, перетащите build.xml в представление Ant.

Убедитесь, что build.xml является частью вашего Java-проекта и не находится в расположении, внешнем по отношению к проекту.

Включите Ant View, выбрав Window> Show View> Other> Ant> Ant.

Откройте Project Explorer, перетащите build.xml в представление Ant.

Ваш вид Ant выглядит примерно так:

Eclipse Ant Integration

При нажатии на цели, сборка / очистка / использование запустит Ant с целью.

Нажатие «факс» выполнит цель по умолчанию – использование.

Плагин Ant Eclipse также поставляется с хорошим редактором для редактирования файлов build.xml. Редактор знает о схеме build.xml и может помочь вам с завершением кода.

Чтобы использовать редактор Ant, щелкните правой кнопкой мыши свой build.xml (из Project Explorer) и выберите «Открыть с помощью»> «Редактор Ant». Редактор Ant должен выглядеть примерно так:

Eclipse Ant Integration

Редактор Ant перечисляет цели с правой стороны. Список целей служит закладкой, позволяющей сразу перейти к редактированию конкретной цели.

Муравей – Интеграция JUnit

JUnit – это широко используемая среда модульного тестирования для разработок на основе Java. Он прост в использовании и легко расширяется. Доступно несколько расширений JUnit. Если вы не знакомы с JUnit, вам следует скачать его с www.junit.org и прочитать его руководство.

В этой главе показано, как выполнять тесты JUnit с использованием Ant. Ant делает это прямо через задачу JUnit.

Атрибуты задачи JUnit представлены ниже:

свойства Описание
реж Откуда вызывать ВМ. Это игнорируется, когда вилка отключена.
JVM Команда, используемая для вызова JVM. Это игнорируется, когда вилка отключена.
вилка Запускает тест в отдельной JVM
errorproperty Имя свойства, чтобы установить, если есть ошибка JUnit
failureproperty Имя свойства для установки в случае сбоя JUnit
haltonerror Останавливает выполнение при возникновении ошибки теста
haltonfailure Останавливает выполнение при сбое
printsummary Советует Ant отображать простую статистику для каждого теста
showoutput Советует Ant отправлять вывод в его логи и форматеры
TEMPDIR Путь к временному файлу, который будет использовать Ant
Тайм-аут Выход из тестов, выполнение которых занимает больше времени, чем этот параметр (в миллисекундах).

Давайте продолжим тему веб-приложения Hello World Fax и добавим цель JUnit.

В следующем примере показано простое выполнение теста JUnit:

<target name="unittest">
   <junit haltonfailure="true" printsummary="true">
      <test name="com.tutorialspoint.UtilsTest"/>
   </junit>
</target>

В этом примере показано выполнение JUnit в классе junit com.tutorialspoint.UtilsTest. Запуск вышеуказанного кода приводит к следующему выводу:

test:
[echo] Testing the application
[junit] Running com.tutorialspoint.UtilsTest
[junit] Tests run: 12, Failures: 0, Errors: 0, Time elapsed: 16.2 sec
BUILD PASSED

Муравей – Расширяющий Муравей

Ant поставляется с предопределенным набором задач, однако вы можете создавать свои собственные задачи, как показано в примере ниже.

Пользовательские задачи Ant должны расширять класс org.apache.tools.ant.Task и расширять метод execute (). Ниже приведен простой пример:

package com.tutorialspoint.ant;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.BuildException;
public class MyTask extends Task {
   String message;
   public void execute() throws BuildException {
      log("Message: " + message, Project.MSG_INFO);
   }
   public void setMessage(String message) {
      this.message= message;
   }
}

Чтобы выполнить пользовательское задание, необходимо добавить следующее в веб-приложение Hello World Fax:

<target name="custom">
   <taskdef name="custom" classname="com.tutorialspoint.ant.MyTask" />
   <custom message="Hello World!"/>
</target>

При выполнении вышеупомянутой пользовательской задачи выводится сообщение «Hello World!»

c:\>ant custom
test:
[custom] Message : Hello World!
elapsed: 0.2 sec
BUILD PASSED

Это всего лишь простой пример, вы можете использовать возможности Ant, чтобы делать все, что вы хотите, чтобы улучшить процесс сборки и развертывания.