Зачем использовать Gradle вместо Ant или Maven?

Что на самом деле дает мне другой инструмент сборки, ориентированный на Java?

Если вы используете Gradle вместо другого инструмента, то почему?


person IttayD    schedule 22.07.2009    source источник
comment
Google вскочил с Gradle для Android SDK. developers.google.com/events/io/sessions/325236644. В Intellij теперь добавлена ​​поддержка gradle. Это делает Gradle основным потоком (а не только игрушечными проектами).   -  person Jayan    schedule 17.09.2013
comment
Артефакты Spring теперь создаются и Gradle, я думаю, что Hibernate — то же самое.   -  person Amir Pashazadeh    schedule 18.11.2013


Ответы (9)


Я сам не использую Gradle в гневе (пока это просто игрушечный проект) [автор имеет в виду, что они до сих пор использовали Gradle только в игрушечном проекте, не то, чтобы Gradle был игрушечным проектом - см. комментарии], но я бы сказал, что причины, по которым можно было бы подумать об его использовании, были бы из-за разочарования Ant и Maven .

По моему опыту, Ant часто предназначен только для записи (да, я знаю, что можно написать красивые модульные, элегантные конструкции, но факт в том, что большинство людей этого не делает). Для любых нетривиальных проектов это становится умопомрачительным, и очень важно убедиться, что сложные сборки действительно переносимы. Его императивный характер может привести к репликации конфигурации между сборками (хотя здесь могут помочь макросы).

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

Механизм плагинов Maven позволяет создавать очень мощные конфигурации сборки, а модель наследования означает, что вы можете определить небольшой набор родительских POM, инкапсулирующих ваши конфигурации сборки для всего предприятия, и отдельные проекты могут наследовать эти конфигурации, оставляя их легковесными. Конфигурация Maven очень многословна (хотя Maven 3 обещает решить эту проблему), и если вы хотите сделать что-то, что не соответствует Maven, вам нужно написать плагин или использовать хакерскую интеграцию с Ant. Примечание. Мне нравится писать плагины Maven, но я понимаю, что многие будут возражать против прилагаемых усилий.

Gradle обещает найти компромисс между Ant и Maven. Он использует подход Ivy для разрешения зависимостей. Он допускает соглашение по настройке, но также включает задачи Ant как первоклассные граждане. Это также разумно позволяет вам использовать существующие репозитории Maven/Ivy.

Так что, если вы столкнулись и застряли с какой-либо болевой точкой Ant/Maven, вероятно, стоит попробовать Gradle, хотя, на мой взгляд, еще предстоит выяснить, не обмениваете ли вы известные проблемы на неизвестные. Доказательство пудинга заключается в еде, поэтому я бы воздержался от суждений до тех пор, пока продукт не станет немного более зрелым, а другие не исправят любые перегибы (по какой-то причине они называют это передовым). Я все еще буду использовать его в своих игрушечных проектах, всегда полезно знать о вариантах.

person Rich Seller    schedule 22.07.2009
comment
@Tom Я не говорил, что Gradle - это игрушечный проект, но я пока использовал его только в игрушечном проекте. Сожалею, что вас ввели в заблуждение - person Rich Seller; 28.10.2010
comment
Sleer — несмотря на возраст, я отредактировал пост, чтобы уточнить в строке то, что уточняется в комментариях — непонимание сразу окрашивает пост в анти-Gradle. Если кто-то, изучающий Gradle (например, я), сначала неправильно понимает это вступительное предложение (как я), он может не читать дальше или не читать поясняющий комментарий (как я почти сделал). Пожалуйста, отмените/отредактируйте мое изменение, если вы не согласны/не любите его. - person Bert F; 04.01.2011
comment
Что бы это ни стоило, у меня не сложилось впечатление, что @RichSeller имел в виду, что Gradle вообще предназначен для игрушечных проектов (даже до того, как прочитал часть в квадратных скобках). - person Jack Leow; 07.01.2012
comment
Когда я до сих пор читал только игрушечный проект, у меня сразу сложилось впечатление, что автор имел в виду сам Gradle как игрушечный проект, особенно после того, как я сам не использую Gradle в гневе. Это говорит о том, что автор использует Gradle, когда не в гневе. Я предлагаю просто переписать первое целое предложение. - person Sergey Orshanskiy; 02.10.2013

Gradle можно использовать для многих целей — это гораздо лучший швейцарский армейский нож, чем Ant, — но он специально ориентирован на многопроектные сборки.

Прежде всего, Gradle — это инструмент программирования зависимостей, что также означает, что это инструмент программирования. С Gradle вы можете выполнить любую случайную задачу в своей настройке, и Gradle позаботится о том, чтобы все объявленные зависимости были выполнены правильно и своевременно. Ваш код может быть распределен по множеству каталогов в любом виде (дерево, плоское, рассеянное и т. д.).

Gradle имеет две отдельные фазы: оценка и выполнение. По сути, во время оценки Gradle будет искать и оценивать сценарии сборки в каталогах, которые он должен искать. Во время выполнения Gradle будет выполнять задачи, которые были загружены во время оценки, принимая во внимание взаимозависимости задач.

Помимо этих функций программирования зависимостей, Gradle добавляет функции зависимости проекта и JAR за счет интеграции с Apache Ivy. Как вы знаете, Ivy — гораздо более мощный и гораздо менее самоуверенный инструмент управления зависимостями, чем, скажем, Maven.

Gradle обнаруживает зависимости между проектами и между проектами и JAR-файлами. Gradle работает с репозиториями Maven (загрузка и выгрузка), такими как iBiblio, или вашими собственными репозиториями, но также поддерживает и другую инфраструктуру репозитория, которая может у вас быть.

В многопроектных сборках Gradle одновременно адаптируется и адаптируется к структуре и архитектуре сборки. Вам не нужно адаптировать свою структуру или архитектуру к инструменту сборки, как это требуется для Maven.

Gradle очень старается не мешать вам, Maven почти никогда этого не делает. Конвенция хороша, но гибкость тоже. Gradle дает вам гораздо больше возможностей, чем Maven, но, что наиболее важно, во многих случаях Gradle предлагает вам безболезненный переход от Maven.

person Steven Devijver    schedule 07.10.2009

Это может быть немного спорным, но Gradle не скрывает того факта, что это полноценный язык программирования.

Ant + ant-contrib — это, по сути, полный по Тьюрингу язык программирования, на котором никто не хочет программировать.

Maven пытается использовать противоположный подход, пытаясь быть полностью декларативным и заставляя вас писать и компилировать плагин, если вам нужна логика. Он также навязывает полностью негибкую модель проекта. Gradle сочетает в себе лучшее из всех этих инструментов:

  • Он следует конвенциональной конфигурации (аля Maven), но только в той степени, в которой вы этого хотите.
  • Это позволяет вам писать гибкие пользовательские задачи, как в Ant
  • Он обеспечивает поддержку многомодульных проектов, которая превосходит Ant и Maven.
  • У него есть DSL, который делает 80% вещей простыми, а 20% возможными (в отличие от других инструментов сборки, которые делают 80% простыми, 10% возможными и 10% фактически невозможными).

Gradle — самый настраиваемый и гибкий инструмент сборки, который мне еще предстоит использовать. Для изучения DSL и таких концепций, как конфигурации, требуются некоторые инвестиции, но если вам нужен серьезный и полностью настраиваемый инструмент сборки JVM, его трудно превзойти.

person omnisis    schedule 28.12.2011

Gradle прекрасно сочетает в себе Ant и Maven, взяв лучшее из обоих фреймворков. Гибкость от Ant и соглашения по настройке, управлению зависимостями и плагинам от Maven.

Итак, если вы хотите иметь стандартную сборку Java, например, в maven, но тестовая задача должна выполнить какой-то нестандартный шаг, это может выглядеть так, как показано ниже.

build.gradle:

apply plugin:'java'
task test{
  doFirst{
    ant.copy(toDir:'build/test-classes'){fileset dir:'src/test/extra-resources'}
  }
  doLast{
    ...
  }
}

Кроме того, он использует синтаксис groovy, который дает гораздо больше возможностей для выражений, чем xml ant/maven.

Это надмножество Ant — вы можете использовать все задачи Ant в gradle с более приятным, похожим на groovy синтаксисом, т.е.

ant.copy(file:'a.txt', toDir:"xyz")

or

ant.with{
  delete "x.txt"
  mkdir "abc"
  copy file:"a.txt", toDir: "abc"
}
person piotrga    schedule 02.05.2010

Мы используем Gradle и предпочли его Maven и Ant. Ant дал нам полную гибкость, а Ivy обеспечивает лучшее управление зависимостями, чем Maven, но у него не очень хорошая поддержка многопроектных сборок. В конечном итоге вы делаете много кода для поддержки многопроектных сборок. Также неплохо иметь сборку по соглашению, которая делает сценарии сборки более лаконичными. С Maven сборка по соглашению заходит слишком далеко, и настройка процесса сборки становится хаком. Кроме того, Maven продвигает каждый проект, публикующий артефакт. Иногда у вас есть проект, разбитый на подпроекты, но вы хотите, чтобы все подпроекты строились и управлялись вместе. Не совсем то, для чего предназначен Maven.

С Gradle вы можете иметь гибкость Ant и строить по соглашению Maven. Например, легко расширить обычный жизненный цикл сборки своей задачей. И вас не заставляют использовать соглашение, если вы этого не хотите. Groovy кодировать гораздо приятнее, чем XML. В Gradle вы можете определять зависимости между проектами в локальной файловой системе без необходимости публиковать артефакты для каждого в репозиторий. Наконец, Gradle использует Ivy, поэтому у него отличное управление зависимостями. Единственным реальным недостатком для меня на данный момент является отсутствие зрелой интеграции с Eclipse, но варианты для Maven на самом деле не намного лучше.

person BCK    schedule 06.07.2010
comment
Лично я думаю, что интеграция с Eclipse просто прекрасна. Установить его в Juno довольно просто. - person djangofan; 20.11.2012
comment
Через 2 года после того, как автор написал этот ответ! - person Dennis; 28.11.2013

Это не мой ответ, но он определенно находит во мне отклик. Это из Technology Radar от ThinkWorks за октябрь 2012 г.:

Две вещи вызывают усталость от инструментов сборки на основе XML, таких как Ant и Maven: слишком много раздражающих остроконечных скобок и грубость подключаемых архитектур. В то время как проблемы синтаксиса могут быть решены путем генерации, архитектура подключаемых модулей серьезно ограничивает возможности инструментов сборки для плавного роста по мере усложнения проектов. Мы пришли к выводу, что плагины — это неправильный уровень абстракции, и вместо этого предпочитаем языковые инструменты, такие как Gradle и Rake, потому что они предлагают более детализированные абстракции и большую гибкость в долгосрочной перспективе.

person Ed Staub    schedule 02.11.2012

Gradle вернул удовольствие от создания/сборки программного обеспечения. Я использовал ant для создания программного обеспечения на протяжении всей своей карьеры, и я всегда считал фактическую «сборку» частью работы разработчика неизбежным злом. Несколько месяцев назад наша компания устала от того, что не использует бинарные репозитории (т. е. регистрацию jar-файлов в vcs), и мне поручили исследовать это. Начал с плюща, так как его можно было прикрутить поверх муравья, мне не очень повезло с публикацией моих построенных артефактов, как я хотел. Я выбрал maven и взломал xml, отлично работал с некоторыми простыми вспомогательными библиотеками, но столкнулся с серьезными проблемами, пытаясь собрать приложения, готовые к развертыванию. Довольно долго я гуглил плагины и читал форумы и в итоге загрузил триллионы банок поддержки для различных плагинов, которые мне было трудно использовать. Наконец, я пошел на град (в этот момент я стал довольно горьким и раздраженным тем, что «это не должно быть НАСТОЛЬКО сложно!»)

Но с первого дня мое настроение начало улучшаться. Я куда-то шел. Мне потребовалось около двух часов, чтобы перенести мой первый модуль ant, а в файле сборки практически ничего не было. Легко устанавливается один экран. Большое «вау» было: создавать скрипты в XML, насколько это глупо? тот факт, что объявление одной зависимости занимает ОДНУ строку, меня очень привлекает -> вы можете легко увидеть все зависимости для определенного проекта на одной странице. С тех пор я был в постоянном движении, для каждой проблемы, с которой я сталкивался до сих пор, находилось простое и элегантное решение. Думаю причины следующие:

  • groovy is very intuitive for java developers
  • documentation is great to awesome
  • the flexibility is endless

Теперь я целыми днями пытаюсь придумать новые функции, которые можно добавить в процесс сборки. Насколько это больно?

person Kalle    schedule 23.05.2012
comment
+1 за сборку скриптов в xml, насколько это глупо? В 2000 году XML считался самой крутой вещью на свете, так что, честно говоря, в то время он казался скорее модным, чем глупым. Языки программирования на основе XML в основном являются lisps, потому что они имеют разделители открытия/закрытия для каждой команды. Но это сверхподробные версии lisp, где 4 символа кода становятся 40 символами. Это один из способов научиться печатать, но не моя чашка чая. - person GlenPeterson; 01.11.2013

Также гораздо проще управлять нативными сборками. Ant и Maven фактически предназначены только для Java. Для Maven существуют некоторые плагины, которые пытаются работать с некоторыми нативными проектами, но они не работают эффективно. Можно написать задачи Ant, которые компилируют нативные проекты, но они слишком сложны и неудобны.

Мы делаем Java с JNI и многими другими нативными битами. Gradle значительно упростил наш беспорядок с Ant. Когда мы начали вводить управление зависимостями в нативные проекты, это было беспорядочно. Мы заставили Maven сделать это, но эквивалентный код Gradle был лишь крошечной частью того, что требовалось в Maven, и люди могли читать и понимать его, не становясь гуру Maven.

person swpalmer    schedule 23.01.2012

Я частично согласен с Эдом Стаубом. Gradle определенно более мощный по сравнению с maven и обеспечивает большую гибкость в долгосрочной перспективе.

Выполнив оценку перехода с maven на gradle, мы решили придерживаться самого maven из-за двух проблем, с которыми мы столкнулись с gradle (скорость ниже, чем у maven, прокси не работал).

person lives    schedule 24.11.2012
comment
У меня были проблемы с прокси с v1.2, но с тех пор я думаю, что он работает. Настолько, что ctnlm или подобное приложение — это решение для maven для решения проблем с прокси-сервером NTLM. Gradle имеет эту поддержку из коробки. хотя это настолько тривиально, мне интересно, почему Maven никогда не имел такой поддержки из коробки для прокси-серверов на основе NTLM auth. - person skipy; 02.11.2013