Возьмем в качестве примера билд скрипты, которые будут компилировать, осуществлять статический анализ кода, запускать юнит тесты и, наконец, создавать jar. Попробуем сделать это с помощью каждого из трех инструментов и сравним синтаксис.
Ant and Ivy
Ivy зависимости необходимо указывать в ivy.xml файле. Пример довольно простой - для него потребуются лишь JUnit и Hamcrest.
Вначале файла мы указали некоторые свойства (properties). Затем мы перечислили задачи одну за другой: разрешение зависимостей (resolve с помощью ivy), очищение (clean), компиляция (compile) и создание jar файла. Это довольно много конфигураций для задачи, которая требуется практически в каждом проекте.
Чтобы запустить задачу по созданию jar файла нужно выполнить команду:
ant jar
Maven
Билд скрипт для maven сохраняется в pom.xml файле. В одном файле хранятся и зависимости, и конфигурации.
Чтобы запустить команду по созданию jar файла, необходимо выполнить команду:
mvn package
Главное отличие от Ant здесь в том, что нам не надо указывать, что будет запускаться. Мы не создаем задачи, а устанавливаем параметры (зависимости, плагины). Maven использует конвенции и предоставляет задачи "из коробки". Однако и Ant, и Maven xml файлы имеют тенденцию расти со временем. Чтобы проиллюстрировать это возьмем pom.xml с реального проекта по автоматизации.
The major difference is that with Maven we don’t need to specify what should be done. We’re not creating tasks but setting the parameters (what are the dependencies, what plugins to use…). This shows the major difference between Ant and Maven. Later promotes the usage of conventions and provides goals (targets) out-of-the-box. Both Ant and Maven XML files tend to grow big with time. To illustrate that, we’ll add Maven CheckStyle, FindBugs and PMD plugins that will take care of static analysis. All three are fairly standard tools used, in one form or another, in many Java projects. We want all static analysis to be executed as part of a single target verify together with unit tests. Moreover, we should specify the path to the custom checkstyle configuration and make sure that it fails on error. Additional Maven code is following:
И это только небольшой проект по автоматизации. При разработке на реальных проектах приходится писать сотни строк xml даже для выполнения часто используемых основных наборов команд.
Код c Gradle намного короче. Кроме того, вероятно некоторые сочтут его также более понятным нежели XML. Gradle при этом также предоставляет набор доступных задач. Чтобы получить весь список задач, доступных для данной конфигурации выполните следующую команду:
gradle tasks --all
Для изучения и понимания механизмов работы билд инструментов лучше всего подходит Ant, поскольку в нем используется явная конфигурация, из которой легко понять, что из себя представляет та или иная задача, как она реализована.
Однако написание Ant задач довольно быстро становится сложным и утомительным занятием. Maven и Gradle предоставляют большое количество готовых к использованию задач с помощью плагинов.
К примеру следующая команда Gradle открывает доступ к 20+ задач, готовых к использованию:
[build.gradle]
apply plugin: 'java'
Задача 1. Напишите простую Maven конфигурацию для запуска тестов в Maven, используйте maven surefire plugin.