Система сборки. Ant, Maven, Gradle
Система сборки – это программное обеспечение, обеспечивающее автоматизацию сборки проекта. Конфигурационный файл для системы сборки описывается в текстовом виде. Как следствие, быстрее можно начать проект, за счет того, что что все типовые задачи заключаются в копировании уже готовых сниппетов. Это гораздо быстрее, более гибко, мобильно, и, главное, читаемо, чем вводить то же самое например, через UI диалоги IDE. Ну и в промышленных проектах это более удобно.
Инструменты сборки могут делать
Польза от инструмента сборки
Изначально, когда не было систем сборки, то было неудобно было работать с большим числом файлов, была платформозависимость, не поддерживалась условная логика.
$ javac MyClass.java
С таким подходом можно большие проекты легко собирать можно использовать условную логику можно разделить сборку на стадии: clean.sh, compile.sh, test.sh
Но все также такой способ остается платформозависимым и нет единого подхода к описанию сборки.
if test ! -e .nuget; then
mkdir .nuget
cp $cachedir/nuget.exe .nuget/nuget.exe
fi
Такая утилита появилась под Unix. Make использует специальный формат для описания билда и называется Make-file. Типичный Make-file содержит название стадий, зависимость стадий. Но основное содержание это такие же команды операционной системы. Команды выполняются запуском make + название стадии: make install, make noopt и т.д.
noopt:
$(MAKE) OPTIMIZATION="-O0"
valgrind:
$(MAKE) OPTIMIZATION="-O0" MALLOC="libc"
src/help.h:
@../utils/generate-command-help.rb > help.h
install: all
@mkdir -p $(INSTALL_BIN)
$(REDIS_INSTALL) $(REDIS_SERVER_NAME) $(INSTALL_BIN)
$(REDIS_INSTALL) $(REDIS_BENCHMARK_NAME) $(INSTALL_BIN)
$(REDIS_INSTALL) $(REDIS_CLI_NAME) $(INSTALL_BIN)
Преимущества:
Недостатки:
Первый инструмент сборки разработанный на java и для java. Имеет конфигурационный файл формата build.xml.
Содержит описание названий стадий, зависимости стадий и могут содержать java - специфичные вещи. Например, как собирать java код (javac), classpath и т.д.
<target name="compile" depends="init" description="Compile the source">
<javac srcdir="${src.main}" destdir="${build.compile}" classpathref="lib.path.id" includeantruntime="true"/>
</target>
<target name="test-compile" depends="compile" description="Compile tests source">
<javac srcdir="${src.test}" destdir="${build.test-compile}" classpathref="lib.path.id" includeantruntime="true">
<classpath>
<pathelement location="${build.compile}"/>
</classpath>
</javac>
</target>
Запускается командой:
$ ant clean compile
Преимущества:
Недостатки:
Эта библиотека решает проблему Ant - авоматическое управление зависимостями. Конфигурационный файл имеет формат ivy.xml. Написан на Java.
<ivy-module version="1.0">
<info organisation="ru.yandex.qatools.allure" module="allure-testng-ant"/>
<dependencies>
<dependency org="ru.yandex.qatools.allure" name="allure-testng-adaptor" rev="1.4.0"/>
<dependency org="org.aspectj" name="aspectjweaver" rev="1.7.4"/>
</dependencies>
</ivy-module>
Можно в конфигурационном файле указать название зависимости: организация, имя, версия и все библиотеки скачаются с интернета.
Имеет конфигурационный файл pom.xml (Project Object Model). Написан на Java.
Запускается подобно Ant'у командой:
$ mvn clean compile
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
<configuration>
<source>${compiler.version}</source>
<target>${compiler.version}</target>
</configuration>
</plugin>
Преимущества:
Написан на Groovy. Использует в качестве файлов конфигурации файлы использующие DSL(Domain Specific Language) на Groovy. Файл называется build.gradle. Команда для запуска аналогична Ant, Maven:
$ gradle clean compile
Возможности Gradle: