vladislav ant addendum
This commit is contained in:
parent
51d3549ea6
commit
bd35114bf7
100
jtd6-11a.tex
100
jtd6-11a.tex
|
@ -141,18 +141,97 @@ hello:
|
||||||
BUILD SUCCESSFULL
|
BUILD SUCCESSFULL
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
Система сборки нашла файл сценария с именем по умолчанию (\code{build.xml}) и выполнила цель указанную по умолчанию (\code{hello}). В стандартной поставке Ant присутствует более 100 заранее созданных заданий, таких как: удаление файлов и директорий (\code{delete}), компиляция java-кода (\code{javac}), вывод сообщений в консоль (\code{echo}) и т.д. Пример реализации удаления временных файлов, используя задание delete
|
Система сборки нашла файл сценария с именем по умолчанию (\code{build.xml}) и выполнила цель указанную по умолчанию (\code{hello}). В стандартной поставке Ant присутствует более 100 заранее созданных заданий, таких как: удаление файлов и директорий (\code{delete}), компиляция java-кода (\code{javac}), вывод сообщений в консоль (\code{echo}) и т.д.
|
||||||
|
|
||||||
% --- слайд
|
Ниже будет представлен пример build-файла, а в качестве проекта для сборки возьмём из прошлого урока с двумя классами. Файл для него будет выглядеть следующим образом:
|
||||||
\begin{lstlisting}[language=XML,style=ASMStyle]
|
В случае, если у вас не сохранился проект с первого урока, то создайте структуру как на рис. \hrf{pic:simple-tree}.
|
||||||
<!-- Очистка -->
|
После чего, можно приступить к написанию билд-файла, который будет находиться в корне проекта (на одном уровне с out и src). Выглядеть он будет следующим образом:
|
||||||
<target name="clean" description="Removes all temporary files">
|
|
||||||
<!-- Удаление файлов -->
|
\begin{lstlisting}[language=XML,style=CCodeStyle]
|
||||||
<delete dir="${build.classes}"/>
|
<?xml version="1.0"?>
|
||||||
|
<project name="Sample" default="run">
|
||||||
|
<property name="src.dir" value="src/ru/gb/jcore" />
|
||||||
|
<property name="build.dir" value="out" />
|
||||||
|
<property name="classes.dir" value="${build.dir}/classes" />
|
||||||
|
<property name="jar.dir" value="${build.dir}/jar" />
|
||||||
|
<property name="main-class" value="ru.gb.jcore.sample.Main" />
|
||||||
|
|
||||||
|
<path id="classpath">
|
||||||
|
<fileset dir="${jar.dir}">
|
||||||
|
<include name="*.jar" />
|
||||||
|
</fileset>
|
||||||
|
<fileset dir="${classes.dir}">
|
||||||
|
<include name="/*.class" />
|
||||||
|
</fileset>
|
||||||
|
</path>
|
||||||
|
|
||||||
|
<target name="clean">
|
||||||
|
<delete dir="${classes.dir}" />
|
||||||
</target>
|
</target>
|
||||||
\end{lstlisting}
|
|
||||||
% --- конец слайда
|
|
||||||
|
|
||||||
|
<target name="compile">
|
||||||
|
<mkdir dir="${classes.dir}" />
|
||||||
|
<mkdir dir="${jar.dir}" />
|
||||||
|
<javac destdir="${classes.dir}" includeAntRuntime="false">
|
||||||
|
<src path="${src.dir}/regular"/>
|
||||||
|
<src path="${src.dir}/sample"/>
|
||||||
|
<classpath refid="classpath" />
|
||||||
|
</javac>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="jar" depends="compile">
|
||||||
|
<jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="${classes.dir}">
|
||||||
|
<manifest>
|
||||||
|
<attribute name="Main-Class" value="${main-class}" />
|
||||||
|
<attribute name="Class-Path" value="${jar.dir}"/>
|
||||||
|
</manifest>
|
||||||
|
</jar>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="run" depends="jar">
|
||||||
|
<java classname="${main-class}">
|
||||||
|
<classpath refid="classpath" />
|
||||||
|
</java>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="clean-build" depends="clean,jar" />
|
||||||
|
<target name="main" depends="clean,run" />
|
||||||
|
</project>
|
||||||
|
\end{lstlisting}
|
||||||
|
|
||||||
|
Теперь по порядку, что есть что.
|
||||||
|
Первым делом мы встречаем тег xml, в котором указывается его версия, а затем тег project с указанием имени проекта и команды по умолчанию.
|
||||||
|
После, в build-файле можно заметить тег property, который по своей натуре является переменной, чтобы сократить те или иные пути до папок/файлоы. Первая переменная с идентификатором (именем) src.dir имеет значение, которое ведёт до пакетов с файлами .java. Затем build.dir, которая обозначает папку, куда будут помещаться файлы после компиляции. classes.dir - путь до папок со сгенерированными файлами .class. jar.dir - директория с бинарными файлами. main-class - это местоположение главного класса приложения, чтобы потом указать .jar-файлу точку входа.
|
||||||
|
Наш сценарий содержит шесть target (команд):
|
||||||
|
|
||||||
|
\begin{enumerate}
|
||||||
|
\item Clean - удаляет папки с результатами компиляции;
|
||||||
|
\item Compile - создаёт две директории, одна для компиляции файлов .java, другая для создания .jar файла, а также указывается какой из двух классов куда будет скомпилирован;
|
||||||
|
\item Jar - она имеет свойство depends, что означает зависимость от указанной команды, а в нашем случае это команда compile, т.е. вначале выполнится compile, после чего команда jar. В подтеге jar присутствует настройка манифеста, там указывается путь до главного класса, в качестве входа в программу, а также местоположение бинарного файла;
|
||||||
|
\item Run - зависит от команды jar и является командой по умолчанию для проекта;
|
||||||
|
\item Clean-build - зависит от команд clean и jar. По своей сути, она выполняет просто эти две команды;
|
||||||
|
\item Main - выполняет команды clean и run.
|
||||||
|
\end{enumerate}
|
||||||
|
|
||||||
|
Также, имеется тег path - в нашем случае он указывает где и какие файлы будут находиться после компиляции.
|
||||||
|
После чего, можно выполнить команду ant run, а вывод будет следующим:
|
||||||
|
|
||||||
|
\begin{verbatim}
|
||||||
|
Buildfile: D:\Desktop\Java\GB\Sample\build.xml
|
||||||
|
|
||||||
|
compile:
|
||||||
|
[javac] Compiling 2 source files to D:\Desktop\Java\GB\Sample\out\classes
|
||||||
|
|
||||||
|
jar:
|
||||||
|
[jar] Building jar: D:\Desktop\Java\GB\Sample\out\jar\Sample.jar
|
||||||
|
|
||||||
|
run:
|
||||||
|
[java] Hello, world!
|
||||||
|
[java] Here is your number: 4.
|
||||||
|
|
||||||
|
BUILD SUCCESSFUL
|
||||||
|
Total time: 0 seconds
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
\subsection{Репозитории, артефакты, конфигурации}
|
\subsection{Репозитории, артефакты, конфигурации}
|
||||||
\subsection{Классический подход (Maven)}
|
\subsection{Классический подход (Maven)}
|
||||||
|
@ -163,6 +242,9 @@ BUILD SUCCESSFULL
|
||||||
|
|
||||||
|
|
||||||
Ant, Ant+Ivy
|
Ant, Ant+Ivy
|
||||||
|
|
||||||
|
На данный момент Ant используют в связке с Ivy, которая является гибким, настраиваемым инструментом для управления (записи, отслеживания, разрешения и отчетности) зависимостями Java проекта.
|
||||||
|
|
||||||
Первым для автоматизации этих задач появился Ant. Это аналог make-файла, а по сути набор скриптов (которые называются tasks). В отличие от make, утилита Ant полностью независима от платформы, требуется лишь наличие на применяемой системе установленной рабочей среды Java — JRE. Отказ от использования команд операционной системы и формат XML обеспечивают переносимость сценариев.
|
Первым для автоматизации этих задач появился Ant. Это аналог make-файла, а по сути набор скриптов (которые называются tasks). В отличие от make, утилита Ant полностью независима от платформы, требуется лишь наличие на применяемой системе установленной рабочей среды Java — JRE. Отказ от использования команд операционной системы и формат XML обеспечивают переносимость сценариев.
|
||||||
Управление процессом сборки происходит посредством XML-сценария, также называемого Build-файлом. В первую очередь этот файл содержит определение проекта, состоящего из отдельных целей (Targets). Цели сравнимы с процедурами в языках программирования и содержат вызовы команд-заданий (Tasks). Каждое задание представляет собой неделимую, атомарную команду, выполняющую некоторое элементарное действие.
|
Управление процессом сборки происходит посредством XML-сценария, также называемого Build-файлом. В первую очередь этот файл содержит определение проекта, состоящего из отдельных целей (Targets). Цели сравнимы с процедурами в языках программирования и содержат вызовы команд-заданий (Tasks). Каждое задание представляет собой неделимую, атомарную команду, выполняющую некоторое элементарное действие.
|
||||||
Между целями могут быть определены зависимости — каждая цель выполняется только после того, как выполнены все цели, от которых она зависит (если они уже были выполнены ранее, повторного выполнения не производится). Типичными примерами целей являются clean (удаление промежуточных файлов), compile (компиляция всех классов), deploy (развёртывание приложения на сервере).
|
Между целями могут быть определены зависимости — каждая цель выполняется только после того, как выполнены все цели, от которых она зависит (если они уже были выполнены ранее, повторного выполнения не производится). Типичными примерами целей являются clean (удаление промежуточных файлов), compile (компиляция всех классов), deploy (развёртывание приложения на сервере).
|
||||||
|
|
Loading…
Reference in New Issue