В заметке приведен пример по сборке проекта Java с применением Ant
Скачать сам Ant http://ant.apache.org/bindownload.cgi
Развернуть архив на диске, например в папку d:\ant\apache-ant-1.9.7
Задать две системные переменные переменные
Теперь проверим в любом месте, например на диске C в консолt введем ant.
Получим в ответ
Создадим простенький файл build.xml для проверки Ant.
1.Создадим новый проект и назовем его, например, ant-test.
2.В этом проекте создадим новый файл с именем build.xml. Файл должен сразу же открыться в Ant Editor.
3.Запишем туда вот такой сценарий:
5.В только что открывшемся виде нажимаем на иконку , находим файл build.xml и дважды нажимаем по нему. Теперь в этом виде отображается наш сценарий, который очень удобно тестировать.
6.Раскроем список my_test_project и сделаем двойной клик по hello-world. В консоли должна появится надпись Hello world!
Чтобы лучше освоиться с Ant, давайте создадим что-нибудь полезное, например, актуальное на сегодняшний день сжатие набора js-файлов с помощью YUICompressor.
Поставим себе задачу. У нас есть набор JavaScript-файлов, представляющих собой одну библиотеку. Чтобы эта библиотека загрузилась максимально быстро для пользователя, нужно объединить все файлы в один и сжать результат с помощью YUICompressor. Создадим в нашем проекте ant-test две папки: js_src и js. В первой будем хранить исходник, а во второй — сжатый результат. Создадим несколько файлов в папке js_src: file1.js, file2.js и file3.js, в каждый из этих файлов напишем какой-нибудь код.
Приступим к написанию сценария. Определимся, каких целей мы хотим достичь. Нам нужно построить библиотеку lib.js (первая цель), для чего нужно объединить все файлы в один (вторая цель) и сжать их (третья цель). Вот примерный сценарий:
Сразу рассмотрим все новые элементы и атрибуты. У элемента <project> появился атрибут default — это цель или набор целей, которые будут выполняться по умолчанию при вызове этого сценария. Нам это понадобится чуть позже. Атрибут basedir задает директорию, относительно которой будут считаться все относительные пути к файлам и директориям. Его указывать необязательно, по умолчанию он равен абсолютному пути к проекту, в котором находится сценарий.
Обратите внимание на атрибут depends у цели build-lib. Он определяет цели, от которых зависит текущая цель. В данном случае мы говорим: «Выполнить цель build-lib только после того, как будут выполнены concat-files и minify». Это очень удобный (но далеко не единственный) механизм для использования одинаковых последовательностей заданий в разных целях. Особенность зависимостей Ant заключается в том, что одна цель будет выполнена только один раз в течение сессии. Подробнее об этом читайте в документации.
Как видно из примера, у нас есть точка входа — цель build-lib (атрибут default у <project>), которая зависит от двух других целей: concat-files и minify. Объединение (конкатенация) файлов выполняется с помощью задания <concat>, в атрибуте destfile указываем, в какой файл хотим сохранить результат. За то, какие именно файлы и в какой последовательности должны быть объединены, отвечает файловый ресурс <filelist>, который мы отдаем заданию <concat>. Думаю, здесь все понятно: в атрибуте dir указываем, в какой директории нужно искать файлы, а с помощью элементов <file> задаем конкретные файлы. Типов ресурсов существует довольно много, большинство из них нужны Java-программистам. Для нас наиболее востребованными будут <filelist> и <fileset>. Основное их различие в том, что в первом случае указывается четкий набор файлов, а во втором — задается набор файлов с помощью паттернов включения и исключения. Например, сейчас мы могли бы заменить <filelist>на такую конструкцию:
Собрана информация из разных статей по работе с Ant.
Установка Ant для работы из командной строки
Для того что бы Ant можно было запускать в Windows из командной строки необходимо:Скачать сам Ant http://ant.apache.org/bindownload.cgi
Развернуть архив на диске, например в папку d:\ant\apache-ant-1.9.7
Задать две системные переменные переменные
ANT_HOME=d:\ant\apache-ant-1.9.7
ANT=%ANT_HOME%\bin
Теперь проверим в любом месте, например на диске C в консолt введем ant.
Получим в ответ
Buildfile: build.xml does not exist!
Build failed
Создадим простенький файл build.xml для проверки Ant.
<project name="MyProject" default="all">
<target name="all" description="Do the entire build" >
<echo>I'm building my software</echo>
</target>
</project>
Это просто xml файл в котором
project - это основной тэг проекта сборки
name="MyProject" - название проекта сборки
default="all" - цель all, которая будет выполняться по умолчанию
target - это цель, их может быть много, это законченное действие во время выполнения скрипта
name="all" - название цели
description="Do the entire build" - расшифровка того что делает цель
<echo> выполнение в консоли, в данном случае выводится текст
Теперь запустим сборочный файл.
Можно выполнить просто команду
ant
или указав файл сборки
ant -f build.xml
В результате получим
Buildfile: D:\build.xml
all:
[echo] I'm building my software
BUILD SUCCESSFUL
Total time: 0 seconds
В дополнении для ant нужна java, т.е. должны быть настроены системные переменные для java.
Ant в Eclipse
Работа в командной строке возможна, но все таки в большинстве случаев я работаю через IDE, это значительно продуктивнее. Рассмотрим как работать с ant в Eclipse.
Сначала нужно связать открытие файла build.xml, в котором описываются команды сборки, с Ant Editor в Eclipse. Для этого идем в Windows - Preferences - General - Editor - File Associations.
Там в списке выбираем build.xml и в нижнем окне выбираем Ant Editor,
2.В этом проекте создадим новый файл с именем build.xml. Файл должен сразу же открыться в Ant Editor.
3.Запишем туда вот такой сценарий:
<?xml version="1.0"?>
<project name="my_test_project">
<target name="hello-world">
<echo>Hello world!</echo>
</target>
</project>
4.Откроем вид Ant: Window → Show View → Other...5.В только что открывшемся виде нажимаем на иконку , находим файл build.xml и дважды нажимаем по нему. Теперь в этом виде отображается наш сценарий, который очень удобно тестировать.
6.Раскроем список my_test_project и сделаем двойной клик по hello-world. В консоли должна появится надпись Hello world!
Файл build.xml аналогичен файлу из первой части, в которой дано его описание
Поставим себе задачу. У нас есть набор JavaScript-файлов, представляющих собой одну библиотеку. Чтобы эта библиотека загрузилась максимально быстро для пользователя, нужно объединить все файлы в один и сжать результат с помощью YUICompressor. Создадим в нашем проекте ant-test две папки: js_src и js. В первой будем хранить исходник, а во второй — сжатый результат. Создадим несколько файлов в папке js_src: file1.js, file2.js и file3.js, в каждый из этих файлов напишем какой-нибудь код.
Приступим к написанию сценария. Определимся, каких целей мы хотим достичь. Нам нужно построить библиотеку lib.js (первая цель), для чего нужно объединить все файлы в один (вторая цель) и сжать их (третья цель). Вот примерный сценарий:
<?xml version="1.0"?>
<project name="Build first JS lib" default="build-lib" basedir=".">
<target name="build-lib" depends="concat-files, minify">
<echo>Done.</echo>
</target>
<target name="concat-files">
<echo>Concatenating files</echo>
<concat destfile="./js/lib.js">
<filelist dir="./js_src">
<file name="file1.js"/>
<file name="file2.js"/>
<file name="file3.js"/>
</filelist>
</concat>
</target>
<target name="minify">
<echo>Minifying files</echo>
</target>
</project>
Сразу рассмотрим все новые элементы и атрибуты. У элемента <project> появился атрибут default — это цель или набор целей, которые будут выполняться по умолчанию при вызове этого сценария. Нам это понадобится чуть позже. Атрибут basedir задает директорию, относительно которой будут считаться все относительные пути к файлам и директориям. Его указывать необязательно, по умолчанию он равен абсолютному пути к проекту, в котором находится сценарий.
Обратите внимание на атрибут depends у цели build-lib. Он определяет цели, от которых зависит текущая цель. В данном случае мы говорим: «Выполнить цель build-lib только после того, как будут выполнены concat-files и minify». Это очень удобный (но далеко не единственный) механизм для использования одинаковых последовательностей заданий в разных целях. Особенность зависимостей Ant заключается в том, что одна цель будет выполнена только один раз в течение сессии. Подробнее об этом читайте в документации.
Как видно из примера, у нас есть точка входа — цель build-lib (атрибут default у <project>), которая зависит от двух других целей: concat-files и minify. Объединение (конкатенация) файлов выполняется с помощью задания <concat>, в атрибуте destfile указываем, в какой файл хотим сохранить результат. За то, какие именно файлы и в какой последовательности должны быть объединены, отвечает файловый ресурс <filelist>, который мы отдаем заданию <concat>. Думаю, здесь все понятно: в атрибуте dir указываем, в какой директории нужно искать файлы, а с помощью элементов <file> задаем конкретные файлы. Типов ресурсов существует довольно много, большинство из них нужны Java-программистам. Для нас наиболее востребованными будут <filelist> и <fileset>. Основное их различие в том, что в первом случае указывается четкий набор файлов, а во втором — задается набор файлов с помощью паттернов включения и исключения. Например, сейчас мы могли бы заменить <filelist>на такую конструкцию:
<fileset dir="./js_src">
<include name="*.js"/>
</fileset>
Но у этого способа есть ряд недостатков. Во-первых, в набор попадут абсолютно все файлы с расширением js в папке js_src, что не всегда нужно на реальных проектах. А во-вторых, даже если указать в паттернах названия файлов, этот ресурс не гарантирует тот порядок следования, в котором вы хотите их объединить. То есть если важно, в каком порядке должны объединяться файлы, лучше задавать набор через <filelist>.
В приведенном примере смущает то, что пути к папкам жестко зашиты в код сценария, поэтому давайте вынесем их в отдельные свойства:
В приведенном примере смущает то, что пути к папкам жестко зашиты в код сценария, поэтому давайте вынесем их в отдельные свойства:
<?xml version="1.0"?>
<project name="Build first JS lib" default="build-lib" basedir=".">
<property name="src.dir" value="./js_src"/>
<property name="dest.dir" value="./js"/>
<target name="build-lib" depends="concat-files, minify">
<echo>Done.</echo>
</target>
<target name="concat-files">
<echo>Concatenating files</echo>
<concat destfile="${dest.dir}/lib.js">
<filelist dir="${src.dir}">
<file name="file1.js"/>
<file name="file2.js"/>
<file name="file3.js"/>
</filelist>
</concat>
</target>
<target name="minify">
<echo>Minifying files</echo>
</target>
</project>
Свойства в Ant задаются с помощью тега <property>. Свойства очень похожи на константы в языках программирования: задав один раз, вы больше не сможете поменять их во время исполнения сценария. Обращаться к свойствам следует через конструкцию ${название свойства}. Свойства можно задавать не только внутри <project>, но и внутри <target>, а также глобально для всего IDE через Preferences - Ant - Runtime - Properties.
Проверьте работу сценария: сделайте двойной клик в Ant View на цели build-lib. У вас в папке js должен появиться файл lib.js, в котором будет содержимое всех трех файлов. Если файл не появился, обновите (Refresh) папку js в Project Explorer.
Файлы объединять мы научились, теперь научимся сжимать их с помощью YUICompressor. Сам разработчик этой замечательной библиотеки рекомендует вызывать компрессор как внешнюю программу, мы же поступим куда более интересно: создадим отдельную задачу, которая будет сжимать файлы.
Модульная структура Ant позволяет расширять его, дописывая новые задачи на Java. Сейчас мы научимся одному из способов добавления таких задач в сценарий сборки.
Скачайте YUICompressor и распакуйте куда-нибудь архив, например, в папкуC:\yuicompressor.
Скачайте YUIAnt.jar и положите его в папку build, где вы распаковали YUICompressor (C:\yuicompressor\build).
Добавьте вот такую конструкцию в сценарий внутрь тега <project>:
Проверьте работу сценария: сделайте двойной клик в Ant View на цели build-lib. У вас в папке js должен появиться файл lib.js, в котором будет содержимое всех трех файлов. Если файл не появился, обновите (Refresh) папку js в Project Explorer.
Файлы объединять мы научились, теперь научимся сжимать их с помощью YUICompressor. Сам разработчик этой замечательной библиотеки рекомендует вызывать компрессор как внешнюю программу, мы же поступим куда более интересно: создадим отдельную задачу, которая будет сжимать файлы.
Модульная структура Ant позволяет расширять его, дописывая новые задачи на Java. Сейчас мы научимся одному из способов добавления таких задач в сценарий сборки.
Скачайте YUICompressor и распакуйте куда-нибудь архив, например, в папкуC:\yuicompressor.
Скачайте YUIAnt.jar и положите его в папку build, где вы распаковали YUICompressor (C:\yuicompressor\build).
Добавьте вот такую конструкцию в сценарий внутрь тега <project>:
<taskdef name="yuicompress" classname="com.yahoo.platform.yui.compressor.YUICompressTask">
<classpath>
<fileset dir="C:\yuicompressor\build">
<include name="*.jar"/>
</fileset>
</classpath>
</taskdef>
С помощью нее мы создали новую задачу <yuicompress>. Чтобы она работала, нужно указать полный путь к Java-классу этой задачи (com.yahoo.platform.yui.compressor.YUICompressTask), а также указать путь, где находится файл с этим классом (<classpath>/<fileset>). Теперь можно дописать цель minify:
<target name="minify">
<echo>Minifying files</echo>
<yuicompress munge="yes" linebreak="5000" preserveallsemicolons="yes" outputfolder="${dest.dir}">
<fileset dir="${dest.dir}">
<include name="*.js"/>
</fileset>
</yuicompress>
</target>
Мы вызвали задачу <yuicompress>, указав ей набор файлов, которые необходимо сжать, с помощью конструкции <fileset>. Так как мы используем задачу, а не вызов внешнего файла, Ant Editor сам подхватил нужный класс и теперь будет выдавать code complete по атрибутам задачи <yuicompress>. Итоговый сценарий сборки выглядит так:
<?xml version="1.0"?>
<project name="Build first JS lib" default="build-lib" basedir=".">
<property name="src.dir" value="./js_src"/>
<property name="dest.dir" value="./js"/>
<taskdef name="yuicompress" classname="com.yahoo.platform.yui.compressor.YUICompressTask">
<classpath>
<fileset dir="C:\yuicompressor\build">
<include name="*.jar"/>
</fileset>
</classpath>
</taskdef>
<target name="build-lib" depends="concat-files, minify">
<echo>Done.</echo>
</target>
<target name="concat-files">
<echo>Concatenating files</echo>
<concat destfile="${dest.dir}/lib.js">
<filelist dir="${src.dir}">
<file name="file1.js"/>
<file name="file2.js"/>
<file name="file3.js"/>
</filelist>
</concat>
</target>
<target name="minify">
<echo>Minifying files</echo>
<yuicompress munge="yes" linebreak="5000" preserveallsemicolons="yes" outputfolder="${dest.dir}">
<fileset dir="${dest.dir}">
<include name="*.js"/>
</fileset>
</yuicompress>
</target>
</project>
Проверьте работу цели build-lib, в папке js у вас должен оказаться пожатый lib.js.
А теперь перейдем к самому интересному. Удобство интеграции Ant с Eclipse заключается не в том, что вы можете в любой момент вызвать нужную цель из окошка, а в том, что вы можете указать сборщик для проекта.
Зайдите в свойства проекта ant-test (Project - Properties) и перейдите в пункт Builders. Нажмите кнопку New и в диалоговом окне выберите Ant Builder. В появившемся окне задайте какое-нибудь имя вашему сборщику (например, My first Ant build). Теперь нужно выбрать сценарий (buildfile). Нажмите на кнопку Browse workspace и в проекте ant-test выберите файл build.xml. Перейдите на вкладку Refresh и отметьте пункты Refresh resources upon completition и The project containing the selected resource. Это значит, что после работы сборщика будет автоматически обновляться список файлов проекта, поэтому в Project Explorer вы всегда будете видеть актуальную версию проекта. Перейдите во вкладку Targets, там вы увидите список целей, которые будут выполняться при разных типах сборки. В частности, в разделах After a «Clean» и Manual build будет указано default target selected. Это означает, что будет выполняться цель, указанная по умолчанию у проекта (помните атрибут default у <project>?). Давайте еще укажем цель в Auto build, для этого нажмем на кнопку Set targets cправа от Auto Build и сразу нажмем на ОК — будет выбрана цель по умолчанию.
Теперь мы можем вызывать сборщик по нажатию на Project - Build Project (на эту команду можно повесить горячие клавиши). А если выберем опцию Project - Build Automatically, то нам даже ничего делать не надо: проект будет сам собираться при любом изменении любого файла проекта.
Таким образом, мы пришли к абсолютно прозрачной автоматизации рутинных задач при работе в IDE. Все, что необходимо сделать, — создать простой сценарий, указать его в качестве сборщика и включить опцию автоматической сборки. Каждый раз, когда вы модифицируете проект (редактируете, удаляете и добавляете файлы) все необходимые действия будут выполнятся в фоновом режиме, не отвлекая разработчика. Это особенно полезно при работе в команде: любой разработчик может внести изменения в сценарий, которые будут автоматически выполняться у всех остальных.
В этой статье были поверхностно рассмотрены некоторые базовые приемы работы с Ant. Советую ознакомиться со списком стандартных задач, там есть такие полезные вещи, как синхронизация каталогов, закачка файлов по FTP, выполнение SQL-запросов, XSL-трансформации, архивация файлов и многое другое.
https://www.artlebedev.ru/tools/technogrette/soft/eclipse-ant/ - Eclipse: знакомство с Ant.
http://www.javaportal.ru/articles/ant10step.html - Ant за 10 шагов.
https://habrahabr.ru/post/99394/ - Разработка - Сборка Java приложений при помощи Apache Ant, quick start.
https://netbeans.org/kb/73/java/project-setup.html?print=yes#existing-java-sources - Creating, Importing, and Configuring Java Projects
Зайдите в свойства проекта ant-test (Project - Properties) и перейдите в пункт Builders. Нажмите кнопку New и в диалоговом окне выберите Ant Builder. В появившемся окне задайте какое-нибудь имя вашему сборщику (например, My first Ant build). Теперь нужно выбрать сценарий (buildfile). Нажмите на кнопку Browse workspace и в проекте ant-test выберите файл build.xml. Перейдите на вкладку Refresh и отметьте пункты Refresh resources upon completition и The project containing the selected resource. Это значит, что после работы сборщика будет автоматически обновляться список файлов проекта, поэтому в Project Explorer вы всегда будете видеть актуальную версию проекта. Перейдите во вкладку Targets, там вы увидите список целей, которые будут выполняться при разных типах сборки. В частности, в разделах After a «Clean» и Manual build будет указано default target selected. Это означает, что будет выполняться цель, указанная по умолчанию у проекта (помните атрибут default у <project>?). Давайте еще укажем цель в Auto build, для этого нажмем на кнопку Set targets cправа от Auto Build и сразу нажмем на ОК — будет выбрана цель по умолчанию.
Теперь мы можем вызывать сборщик по нажатию на Project - Build Project (на эту команду можно повесить горячие клавиши). А если выберем опцию Project - Build Automatically, то нам даже ничего делать не надо: проект будет сам собираться при любом изменении любого файла проекта.
В этой статье были поверхностно рассмотрены некоторые базовые приемы работы с Ant. Советую ознакомиться со списком стандартных задач, там есть такие полезные вещи, как синхронизация каталогов, закачка файлов по FTP, выполнение SQL-запросов, XSL-трансформации, архивация файлов и многое другое.
Ant в Netbeans
Теперь откроем проект созданный выше в NetBeans. Сборки в NetBeans основаны на Ant, поэтому создается автоматом файл build.xml с набором стандартных команд. Но нам это не нужно, т.к. у нас есть свой build.xml. Для импорта уже созданного проекта сделаем следующие.
1.Выберем File - New Project - Java - Java Project with Existing Sources
2.Указываем папку с проектом, называем проект Ant-test и переименовываем build.xml, например в nbbuild.xml, что бы не путать их.
3.Указываем папку с фалами проекта. Если вдруг папка попала в тест, то просто мышой её перетащим.
4.Выбираем нужные файлы, в нашем случае все.
Проект должен загрузиться.
5.Проверяем наш файл build.xml, он теперь располагается в паке по умолчанию.
В консоли видим, что и в Eclipse.
Также доступны и стандартные команды сборки, созданные NetBeans.
Ссылки по теме
http://ant.apache.org/ - Apache Ant.https://www.artlebedev.ru/tools/technogrette/soft/eclipse-ant/ - Eclipse: знакомство с Ant.
http://www.javaportal.ru/articles/ant10step.html - Ant за 10 шагов.
https://habrahabr.ru/post/99394/ - Разработка - Сборка Java приложений при помощи Apache Ant, quick start.
https://netbeans.org/kb/73/java/project-setup.html?print=yes#existing-java-sources - Creating, Importing, and Configuring Java Projects
Комментариев нет:
Отправить комментарий