Что делает другой инструмент построения, ориентированный на Java, действительно получает меня?
Если вы используете Gradle для другого инструмента, почему?
Что делает другой инструмент построения, ориентированный на Java, действительно получает меня?
Если вы используете Gradle для другого инструмента, почему?
Я не использую Gradle в ярости сам (только игрушка до сих пор) [автор означает, что они использовали Gradle пока только проект игрушек, а не то, что Gradle - игрушечный проект - см. комментарии], но я бы сказал, что причины, которые можно было бы использовать, были бы из-за разочарований Ant и Maven.
В моем опыте Ant часто используется только для записи (да, я знаю, что можно написать красиво модульную, элегантную сборку, но факт у большинства людей нет). Для любых нетривиальных проектов он становится гибким, и он бережно относится к тому, чтобы сложные сборки были действительно портативными. Его императивный характер может привести к репликации конфигурации между сборками (хотя макросы могут помочь здесь).
Maven придерживается противоположного подхода и ожидает, что вы полностью интегрируетесь с жизненным циклом Maven. Опытные пользователи Ant считают это особенно раздражающим, поскольку Maven удаляет многие из ваших свобод в Ant. Например, есть блог сонатипа, в котором перечислены многие критические замечания Maven и их ответы.
Механизм плагина Maven позволяет создавать очень мощные конфигурации сборки, а модель наследования означает, что вы можете определить небольшой набор родительских POM, инкапсулирующих ваши конфигурации сборки для всего предприятия, а отдельные проекты могут наследовать эти конфигурации, оставив их легкими. Конфигурация Maven очень многословна (хотя Maven 3 promises для решения этой проблемы), и если вы хотите делать что-либо, что не является способом Maven, вам нужно написать плагин или использовать интеграцию hacky Ant. Заметьте, мне нравится писать плагины Maven, но признаю, что многие возражают против прилагаемых усилий.
Gradle promises, чтобы попасть в сладкое пятно между Ant и Maven. Он использует метод Ivy для разрешения зависимостей. Он допускает условную конфигурацию, но также включает в себя Ant задачи в качестве граждан первого класса. Это также разумно позволяет использовать существующие хранилища Maven/Ivy.
Итак, если вы ударили и застряли в любой из бонусных точек Ant/Maven, вероятно, стоит попробовать Gradle, хотя, на мой взгляд, это еще предстоит выяснить, если вы не просто торговля известными проблемами для неизвестных. Доказательство пудинга есть в еде, хотя я бы оставил суждение, пока продукт не станет более зрелым, а другие утюжили из-за каких-либо перегибов (они называют это кровоточащим краем по какой-то причине). Я все равно буду использовать его в своих игрушечных проектах, но всегда хорошо знать варианты.
Gradle может использоваться для многих целей - это гораздо лучший швейцарский армейский нож, чем Ant, но он специально ориентирован на многопроектные сборки.
Прежде всего, Gradle - это инструмент программирования зависимостей, который также означает инструмент программирования. С помощью Gradle вы можете выполнить любую случайную задачу в своей настройке, а Gradle будет проверять правильность и своевременность всех объявленных зависимостей. Ваш код можно распространять по многим каталогам в любом виде макета (дерево, плоский, разбросанный,...).
Gradle имеет две различные фазы: оценка и выполнение. В принципе, во время оценки Gradle будет искать и оценивать скрипты сборки в каталогах, которые он должен посмотреть. Во время выполнения Gradle будут выполняться задачи, которые были загружены во время оценки с учетом межзадач задачи.
В дополнение к этим функциям программирования зависимостей Gradle добавляются функции зависимостей проекта и JAR путем интеграции с Apache Ivy. Как вы знаете, Айви - гораздо более мощный и менее самоуверенный инструмент управления зависимостями, чем Maven.
Gradle обнаруживает зависимости между проектами и между проектами и JAR. Gradle работает с репозиториями Maven (загрузка и выгрузка), такими как iBiblio, или ваши собственные репозитории, но также поддерживает и другую инфраструктуру репозитория, которую вы могли бы иметь.
В многопроектных сборках Gradle адаптируется и адаптируется к структуре сборки и архитектуре. Вам не нужно приспосабливать свою структуру или архитектуру к инструменту сборки, как это требуется с Maven.
Gradle очень стараются не мешать вам, усилия, которые Maven почти никогда не делает. Конвенция хороша, но гибкость. Gradle дает вам больше возможностей, чем Maven, но самое главное во многих случаях Gradle предложит вам безболезненный путь перехода от Maven.
Это может быть несколько противоречивым, но Gradle не скрывает, что он является полноценным языком программирования.
Ant + ant -contrib - это, по сути, полный язык программирования, который никто не хочет программировать.
Maven пытается использовать противоположный подход, пытаясь быть полностью декларативным и заставляя писать и компилировать плагин, если вам нужна логика. Это также налагает модель проекта, которая полностью негибкая. Gradle сочетает в себе лучшие из всех этих инструментов:
Gradle - самый настраиваемый и гибкий инструмент построения, который я еще не использовал. Это требует некоторых инвестиций для изучения DSL и таких концепций, как конфигурации, но если вам нужен совершенно бессмысленный и полностью настраиваемый инструмент сборки JVM, который трудно превзойти.
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, который дает гораздо больше мощности выражения, чем ant/maven xml.
Это надмножество Ant - вы можете использовать все Ant задачи в gradle с более симпатичным синтаксисом groovy, т.е.
ant.copy(file:'a.txt', toDir:"xyz")
или
ant.with{
delete "x.txt"
mkdir "abc"
copy file:"a.txt", toDir: "abc"
}
Мы используем Gradle и выбираем его над Maven и Ant. Ant дал нам полную гибкость, а Ivy дает лучшее управление зависимостями, чем Maven, но нет поддержки для многопроектных сборок. В конце концов вы делаете много кодирования для поддержки многопроектных сборок. Кроме того, наличие некоторых построчных соглашений является приятным и делает скрипты сборки более краткими. С Maven, он берет сборку по соглашению слишком далеко, и настройка процесса сборки становится взломом. Кроме того, Maven рекламирует каждый проект, публикуя артефакт. Иногда у вас есть проект, разбитый на подпроекты, но вы хотите, чтобы все подпроекты были построены и сопоставлены версиями. На самом деле для Maven не предназначено.
С Gradle вы можете иметь гибкость Ant и строить по соглашению Maven. Например, тривиально продлить обычный жизненный цикл сборки с помощью собственной задачи. И вы не обязаны использовать соглашение, если вы этого не хотите. Groovy гораздо лучше кода, чем XML. В Gradle вы можете определять зависимости между проектами в локальной файловой системе без необходимости публиковать артефакты для каждого в репозитории. Наконец, Gradle использует Ivy, поэтому имеет отличное управление зависимостями. Единственный реальный недостаток для меня до сих пор - отсутствие зрелой интеграции Eclipse, но варианты для Maven на самом деле не намного лучше.
Это не мой ответ, но он определенно резонирует со мной. Это от Технологический радар ThoughtWorks 'с октября 2012 года:
Две вещи вызвали усталость с инструментами построения на основе XML, такими как Ant и Maven: слишком много сердитых заостренных фигурных скобок и грубость плагина архитектуры. В то время как проблемы синтаксиса можно поколение, подключаемые архитектуры сильно ограничивают возможность сборки инструменты, чтобы грациозно расти, поскольку проекты становятся более сложными. Мы пришли почувствовать, что плагины являются неправильным уровнем абстракции и предпочитают языковые инструменты, такие как Gradle и Rake вместо этого, потому что они предлагают мелкозернистые абстракции и большая гибкость в долгосрочной перспективе.
Gradle вернуть удовольствие в программное обеспечение для сборки/сборки. Я использовал ant для создания программного обеспечения всю свою карьеру, и я всегда считал, что фактическая "сборка" части Dev-работы является необходимым злом. Несколько месяцев назад наша компания устала от того, что не использовала двоичное репо (также проверяя банки в vcs), и мне была поручена расследовать это. Начиная с плюща, так как он мог быть прикреплен болтами поверх ant, мне не повезло, что мои построенные артефакты были опубликованы, как я хотел. Я пошел на maven и взломал xml, работал великолепно для некоторых простых вспомогательных библиотек, но у меня возникли серьезные проблемы, пытаясь объединить приложения, готовые к развертыванию. Запуганные довольно долго плагины для googling и форумы для чтения и заработали загрузку триллионов поддерживающих банок для различных плагинов, которые мне было трудно использовать. Наконец, я пошел на gradle (довольно горький в этот момент и раздражал, что "это не должно быть ЭТО сложно!" )
Но с первого дня мое настроение начало улучшаться. Я куда-то попадал. Мне потребовалось два часа, чтобы перенести мой первый модуль ant, и файл сборки в основном был ничем. Легко устанавливается на один экран. Большой "вау" был: строить скрипты в xml, насколько глупо это? тот факт, что объявление одной зависимости принимает одну строку, очень привлекательно для меня → вы можете легко увидеть все зависимости для определенного проекта на одной странице. С тех пор я был в постоянном рулоне, для каждой проблемы, с которой я столкнулся, существует простое и элегантное решение. Я думаю, что это причины:
Теперь я провожу свои дни, пытаясь придумать новые функции, чтобы добавить к нашему процессу сборки. Как это заболело?
Также намного проще управлять встроенными сборками. Ant и Maven - фактически Java-only. Для Maven существуют некоторые плагины, которые пытаются обрабатывать некоторые собственные проекты, но они не выполняют эффективную работу. Ant могут быть записаны задачи, которые компилируют собственные проекты, но они слишком сложны и неудобны.
Мы делаем Java с JNI и множеством других собственных битов. Gradle значительно упростил наш Ant беспорядок. Когда мы начали внедрять управление зависимостями в родные проекты, это было грязно. Мы получили Maven для этого, но эквивалентный код Gradle был крошечной частью того, что было необходимо в Maven, и люди могли его прочитать и понять, не став гуру Maven.
Я согласен частично с Эд Штаубом. Gradle определенно более мощный по сравнению с maven и обеспечивает большую гибкость в долгосрочной перспективе.
После выполнения оценки для перехода с maven на gradle мы решили придерживаться самого maven для двух проблем мы столкнулись с Gradle (скорость медленнее, чем maven, прокси не работал).