Build инструменты

В мире Java превалируют 3 билд инструмента:

  • Apache Ant with Ivy

  • Maven

  • Gradle

Ant with Ivy

Ant был первым из современных билд инструментов. Он появился в 2000 году и очень быстро стал популярным билд инструментом для Java проектов. Он легок в освоении, что позволяет любому специалисту начать с ним работать практически без подготовки. Его идеология строится на идее процедурного программирования. Позже была добавлена возможность использовать плагины.

Основным недостатком считается использование XML в качестве формата для написания билд скриптов. Сам по себе XML, иерархичный по своей природе, не очень хорошо подходит для процедурного подхода, который Ant использует. Кроме того, Ant XML файл имеет тенденцию чрезмерно разрастаться на больших проектах, становясь сложно читаемым и поддерживаемым.

Позже, когда возникла необходимость поддерживать управление зависимостями через Internet, Ant интегрировался с Apache Ivy (менеджер зависимостей, который может загружать зависимости из удаленного репозитория).

Главное преимущество Ant - это большой контроль над билд процессом и легкость кастомизации.

Официальный сайт Apache Ant - http://ant.apache.org/

Apache Ivy - http://ant.apache.org/ivy/

Maven

Maven появился в 2004 году. Он ориентировался на решение некоторых проблем, с которыми столкнулись разработчики, используя Ant.

Maven тоже использует XML в качестве формата для написания спецификации билда. Тем не менее, его структура совершенно другая. В то время, как Ant требует от разработчиков написания всех задач в явном виде, maven использует парадигму "convention over configuration" и предоставляет уже доступные задачи, которые можно использовать "из коробки". Кроме того, maven представил новую фичу - возможность загружать зависимости из удаленного репозитория по сети (позже такая фича была реализована в Ant через интеграцию с Ivy), что перевернуло представление об управлении зависимостями.

Maven также не лишен преимуществ и недостатков. Недостатки:

  • Управление зависимостями не очень хорошо решают конфликты между разными версиями одной библиотеки (Ivy в этом плане работает лучше);

  • Кастомизация задач в Maven - более трудная задача, чем в Ant, поскольку Maven более сфокусирован на управление зависимостями.

  • XML билд спецификация тоже имеет тенденцию разрастаться на больших проектах.

Преимущества Maven: 1. Легкость освоения 2. Доступность задач из коробки на весь жизненный цикл программного обеспечения. Если проект строится на определенных стандартах, то с Maven можно легко пройти через весь его жизненный цикл. Однако это преимущество было достигнуто за счет потери в гибкости(кастомизация дается сложнее). 3. XML билд скрипт строго структурирован и стандартизирован, также как и структура проекта. Это позволяет создавать более чистые билд спецификации и единообразно структурированные проекты.

Официальный сайт Maven - http://maven.apache.org/

Gradle

В это время все больше получает популярность идея DSL (Domain Specific Language). Идея заключается в использовании языка программирования, который придуман для решения проблем в определенном домене. В случае с билд инструментами, одним из вариантов применения этой идеи стал Gradle.

Gradle появился в 2012 году и взял лучшее от Ant и Maven и построил над всем этим DSL. Он обладает возможностями и гибкостью Ant, легкостью использования и жизненным циклом Maven. В результате Gradle довольно быстро обрел популярность.

Gradle не использует XML. Вместо этого он использует разработанный DSL, основанный на Groovy (JVM-Based язык программирования). В результате билд скрипты стали короче и чище, чем написанные для Ant и Maven. Количество кода конфигурации уменьшилось, поскольку Gradle был разработан с целью разрешения специфической проблемы: провести программное обеспечение через его жизненный цикл, от компиляции через статический анализ и тестирование до упаковки и развертывания.

Gradle использует Apache Ivy для управления jar зависимостями (загрузка из удаленного репозитория).

Кредо этого инструмента можно обозначить как "конвенция - это хорошо, но гибкость тоже важна".

Официальная страница Gradle - http://gradle.org/

Вопрос 1. Чем отличается XML от языка программирования?

Last updated