Лекция 15
Автоматизация сборки
Задача автоматизации
Задача автоматизации сборки заключается в автоматической сборке конечного продукта.
Утилиты:
Make
Nmake
CMake
ANT
MSBuild
И т.д.
ANT
ANT – Another Neat Tool.
Сборка задается в виде XML файла:
<project>
<target name="clean"> <delete dir="build"/>
</target>
<target name="compile">
<mkdir dir="build/classes"/>
<javac srcdir="src" destdir="build/classes"/> </target>
<target name="jar">
<mkdir dir="build/jar"/>
<jar destfile="build/jar/HelloWorld.jar" basedir="build/classes"> <manifest>
<attribute name="Main-Class" value="oata.HelloWorld"/> </manifest>
</jar>
</target>
<target name="run">
<java jar="build/jar/HelloWorld.jar" fork="true"/> </target>
</project>
Запуск процесса сборки
Для запуска процесса сборки необходимо вызвать команду ant с параметрами:
Файл сборки (по-умолчанию build.xml)
Цели сборки
ant compile ant jar Ant run
или
ant compile jar run
Свойства
Свойства предназначены для многократной ссылки на их значения
<project name="HelloWorld" basedir="." default="main">
<property name="src.dir" value="src"/> <property name="build.dir" value="build"/>
<property name="classes.dir" value="${build.dir}/classes"/> <property name="jar.dir" value="${build.dir}/jar"/> <property name="main-class" value="oata.HelloWorld"/>
<target name="clean">
<delete dir="${build.dir}"/> </target>
<target name="compile">
<mkdir dir="${classes.dir}"/>
<javac srcdir="${src.dir}" destdir="${classes.dir}"/> </target>
. . .
Зависимости
Если одна задача зависит от другой, то она будет выполнена только после успешного выполнения той, от которой она зависит
. . .
<target name="jar" depends="compile"> <mkdir dir="${jar.dir}"/>
<jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="$ {classes.dir}">
<manifest>
<attribute name="Main-Class" value="${main-class}"/> </manifest>
</jar>
</target>
<target name="run" depends="jar">
<java jar="${jar.dir}/${ant.project.name}.jar" fork="true"/> </target>
<target name="clean-build" depends="clean,jar"/> <target name="main" depends="clean,run"/>
</project>
Пример результата выполнения Ant
Buildfile: build.xml clean:
compile:
[mkdir] Created dir: C:\...\build\classes
[javac] Compiling 1 source file to C:\...\build\classes
jar:
[mkdir] |
Created dir: C:\... |
\build\jar |
[jar] |
Building jar: C:\... |
\build\jar\HelloWorld.jar |
run:
[java] Hello World
main:
BUILD SUCCESSFUL
Указание сторонних библиотек
<project name="HelloWorld" basedir="." default="main">
...
<property name="lib.dir" value="lib"/> <path id="classpath">
<fileset dir="${lib.dir}" includes="**/*.jar"/> </path>
...
<target name="compile">
<mkdir dir="${classes.dir}"/>
<javac srcdir="${src.dir}" destdir="${classes.dir}" classpathref="classpath"/> </target>
<target name="run" depends="jar">
<java fork="true" classname="${main-class}">
<classpath>
<path refid="classpath"/>
<path location="${jar.dir}/${ant.project.name}.jar"/>
</classpath>
</java>
</target>
...
</project>
Наиболее используемые задачи
Ant – вызов другой сборки
AntCall – вызов другой цели
Copy – копирование файлов/каталогов
Delete – удаление файлов/каталогов
Echo – вывод текста на экран/в файл
Exec – вызов системную команду
Jar – пакует содержимое в файл jar
Java – выполняет java класс
Javac – компилирует java классы
Javadoc – вызывает процесс документации
Mkdir –создает каталог
Property – задает свойство
Zip – запаковывает содержимое в zip файл
Property
Параметры:
name – название свойства
value – значение
location – абсолютное имя файла
file – название файла
enviroment – переменная окружения
И др…
<property name="foo.dist" value="dist"/>
<property file="${user.home}/.ant-global.properties"/>
<property environment="env"/>
<echo message="Number of Processors = $
{env.NUMBER_OF_PROCESSORS}"/>
<echo message="ANT_HOME is set to = $ {env.ANT_HOME}"/>
Ant
Параметры
Anfile – название файла (build.xml)
Dir – базовый каталог для выполнения
Target – цель для сборки
И др…
Примеры:
<ant antfile="subproject/subbuild.xml" target="compile"/>
<ant dir="subproject"/>
<ant antfile="subproject/property_based_subbuild.xml"> <property name="param1" value="version 1.x"/> <property file="config/subproject/default.properties"/>
</ant>