Buildr, Gradle или ждать Maven 3?

Я действительно устал постоянно бороться с Maven 2. Инструменты сборки не должны мешать. Недавно я смотрел Buildr и Gradle. Maven 3, похоже, исправляет некоторые проблемы. Итак, что мне теперь делать? Строитель? Gradle? Или подождать год Maven 3?


person Sten Roger Sandvik    schedule 20.08.2009    source источник
comment
просто примечание для других, читающих это позже: теперь доступен maven 3   -  person Brad Cupit    schedule 21.10.2010
comment
Также доступна версия Gradle 1.0-milestone 3. :)   -  person Chris Jaynes    schedule 24.05.2011


Ответы (9)


Никакая система сборки - это не панацея. Я считаю, что Maven решает больше проблем, чем вызывает для меня, но мне вполне комфортно писать плагины, чтобы обойти его недостатки, я также имею дело с сотнями проектов, поэтому обработка наследования и зависимостей Maven очень мне помогает.

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

Есть ли что-то особенное, что вас беспокоит в Maven, или это общий зуд? Если это особая проблема, стоит взглянуть на проблемы Maven 3 в Jira, если проблема не адресован, вы можете поднять его, иначе может быть мало смысла ждать

person Rich Seller    schedule 20.08.2009
comment
Да, я знаю, что у buildr и gradle тоже есть проблемы. Самая большая проблема в Maven 2 - временные зависимости. Это здорово, когда мне это нужно, но иногда мне хотелось бы исключить зависимость глобально, например, ведение журнала общего пользования. Кроме того, с некоторыми из плагинов, которые я использую, действительно ужасно работать. Один из вариантов - написать лучший плагин, я полагаю :-) - person Sten Roger Sandvik; 20.08.2009
comment
Вы можете исключить транзитивные зависимости, хотя это немного неудобно, взгляните на эту страницу: docs.codehaus.org/display/MAVENUSER/Dependency+Mechanism - person Rich Seller; 20.08.2009
comment
Именно этим методом я и занимаюсь сейчас. Все еще хотел бы объявить глобальное исключение. Maven 3 выглядит так, как будто обещает такое. - person Sten Roger Sandvik; 20.08.2009
comment
Вместо исключения я добавляю зависимость с предоставленной областью видимости, чтобы она не отображалась в путях к классам или WAR. Тем не менее, он по-прежнему будет в пути к классам компиляции, но до тех пор, пока вы не используете общий журнал в своем коде, все будет в порядке. - person Martin; 01.11.2009
comment
У вас может быть глобальное исключение, просто определите его в dependencyManagement верхнего уровня. - person Tim O'Brien; 09.07.2010
comment
Последняя версия Gradle гораздо менее подробна и гораздо более гибка, чем Maven. Я согласен с тем, что у Buildr и Gradle также есть проблемы, но для меня это сводится к следующему: простые вещи просты во всех трех инструментах, но Gradle кажется намного более гибким, чем Maven, когда дело доходит до выполнения нестандартных вещей, которые необходимо делать большинству сборок. в конце концов. - person Chris Jaynes; 24.05.2011
comment
+1 Maven требует больше времени на настройку, но в нем меньше серых зон для поддержки. - person Edward J Beckett; 18.12.2012
comment
Одна из наименее популярных функций maven - это версии плагинов. Это означает, что старые проекты не ломаются, когда maven развивается, и ошибки исправляются / семантика изменяется тонкими способами. Обратной стороной является то, что он загружает половину интернета при первом создании чего-либо из-за большого количества различных плагинов. - person Erik Martino; 20.05.2013

Я бы не ожидал слишком многого от Maven 3. Люди, стоящие за родословной Maven инструментов сборки, всегда придерживались предположения, что сборки проекта однородны, то есть: все проблемы сборки в основном сводятся к одной и той же проблеме. Этого взгляда на мир можно довольно последовательно придерживаться перед лицом противоположных взглядов, но за это приходится платить. Отсутствие логики сценариев в Maven («когда вы хотите создать сценарий, вы знаете, что делаете что-то не так»), громоздкий API плагина («ни один обычный пользователь Maven не должен писать плагин») и центральный репозиторий («мы все имеют одинаковые зависимости ") - все это свидетельствует об этом всеобъемлющем предположении.

В реальном мире проблемы сборки неоднородны, потому что люди создают программное обеспечение по самым разным причинам. Все они «развиваются», как все мы время от времени «сверлим дыры» для решения уникальных задач. Независимо от вашего уровня абстракции, вы всегда найдете сходство при сравнении произвольных задач сборки. Именно обнаружение этих сходств и осуждение различий является крахом для дизайна Maven и причиной того, что он вызывает столько критики. По сути, Maven авторитарен и утопичен по своим взглядам.

PS: Maven имеет хорошие функции, такие как отказ от конфигурации и идея использования репозиториев (реализация этой идеи в Maven вызывает затруднения).

person Steven Devijver    schedule 12.01.2010
comment
Я постоянно пишу очень сложные сборки Maven с помощью Groovy. Еще у меня есть одни из самых уникальных сборок - я создаю книги с Maven. POM легко понять. - person Tim O'Brien; 09.07.2010
comment
Вы не сможете оценить важность репозитория / прокси maven на месте, пока не поработаете в командной среде, и вам нужно будет преследовать людей, чтобы узнать, о каких jar-файлах они говорят. «Стороннее» репо, куда люди могут загружать банки, означает, что все будут играть с одними и теми же игрушками. - person tunaranch; 05.08.2010
comment
Maven plus Groovy (GMaven) - это то, что вам нужно. Жесткость и гибкость! +1 - person Adam Gent; 23.02.2011
comment
@ Адам Гент - Почему бы тебе просто не использовать Gradle? Тогда вы получите гибкость Groovy, но без большой путаницы с XML ... - person Chris Jaynes; 24.05.2011
comment
@Chris Jaynes, потому что вам все еще нужно создать файл POM для распространения в центральном репозитории maven. А из Maven вы можете вызвать Gradle или (что будет дальше в моде) из Maven. IE Maven может выполнять начальную загрузку процесса сборки. Таким образом, разработчикам с открытым исходным кодом не нужно загружать еще один инструмент сборки (из maven вы также можете убедиться, что они получили правильную версию gradle). - person Adam Gent; 26.05.2011
comment
@Adam Gent - я признаю, что еще не возился с этим, но Gradle должен иметь возможность генерировать файлы POM для публикации обратно в репозитории: gradle.org/maven_plugin.html. Потратив немного времени на оба инструмента, я могу согласиться с вами, что встраивание скриптов Groovy в Maven работает нормально, но все же это не так элегантно, как возможность убрать Maven с дороги и делать сборки по-своему, а не танцевать вокруг того, что, по мнению Maven, вы должны делать. Независимо от того, заменит ли Gradle Maven или нет, я согласен со Стивеном в том, что жесткость Maven в конечном итоге приведет к его краху ... - person Chris Jaynes; 27.05.2011
comment
После года работы с Maven 3 это очень хорошо подводит итог. По сути, если ваши проблемы со сборкой соответствуют тому, как Maven считает, что вы должны работать, у вас все в порядке. Как только вы делаете что-то отдаленно интеллектуальное или индивидуальное, вы платите за это кровью. Я не ненавижу это, но он не такой гибкий, как я думаю. - person Nick Swarr; 28.09.2011
comment
@steven: отличный синопсис того, почему maven не работает по дизайну. Как сказали некоторые другие люди: люди, которые любят maven, любят его теорию; люди, которые ненавидят maven, ненавидят его реальность! - person koma; 13.03.2012

Здесь мы используем Maven, но я обнаружил, что как только вы выходите за рамки простого проекта, pom.xml начинает становиться все более и более сложным. Вы начинаете тратить много времени на выяснение того, как, черт возьми, настроить свой помпой на то, что вы хотите, и как обойти различные проблемы.

Что меня действительно поразило, так это ухо, которое мы строим. У нас есть несколько войн в этом ухе, и Maven обычно вставляет библиотеки в войны. Однако, чтобы уменьшить размер войн и сохранить все файлы jar одинаковыми, мы хотели поместить общие для войн jar-файлы в каталог lib уха.

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

В другом проекте у нас есть файлы справки на основе HTML. Люди, которые пишут справку, пишут их в Microsoft Word, а затем используют программу для их перевода в HTML. Одно изменение символа может отразиться на сотнях файлов.

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

Итак, часть моей сборки - это разархивирование этого файла и размещение его в war. Легко сделать в Ant, не может сделать это в Maven, если вы не используете плагин Antrun, который позволяет писать код Ant для решения проблем, с которыми Maven не может справиться без полноценного плагина.

Я вижу, что делает Maven, но теория опередила реальность. Я обнаружил, что Ivy и Ant могут выполнять большую часть проверки зависимостей, которую выполняет Maven, без проблем с написанием и поддержкой poms.

Если вы еще не используете Maven, сначала попробуйте Ant с Ivy. Затем, когда выйдет Maven 3, попробуйте это. Я помню переход от Maven 1 к Maven 2. Они были полностью несовместимы друг с другом, и все, что вы узнали с помощью Maven 1, устарело. Было бы глупо изучать и переделывать свои проекты в Maven 2, чтобы внезапно обнаружить, что переделываете все для Maven 3.

person David W.    schedule 02.06.2010
comment
Верно, поддержка EAR с скинни WARs болезненно в Maven 2.0. Что касается перехода на Maven 3, Maven 3.0 можно использовать как заменяющую замену для Maven 2 и всех проектов Maven 2.x, которые я тестировал, хорошо собираются с Maven 3.0 (в Maven 3.1 должны произойти несовместимые с обратной совместимостью изменения) . Таким образом, сравнение с переходом с Maven 1 на Maven 2 невозможно. - person Pascal Thivent; 02.06.2010
comment
Вы можете использовать плагин зависимостей для распаковки этого zip-архива. - person Tim O'Brien; 09.07.2010
comment
Если вы создаете WAR с помощью maven-assembly-plugin, у вас есть возможность распаковать зависимость (в вашем случае zip) в дескрипторе сборки. - person yihtserns; 27.09.2011

maven 3.x уже встроен в IDE (по крайней мере, в netbeans, проверьте эту ссылку для получения дополнительной информации). Сегодня вы можете поиграть с maven 3.x, просто создав проект Maven с netbeans.

Еще одна приятная новость заключается в том, что maven получил более «корпоративную» поддержку благодаря интеграции EJB / WS в проекты IDE (опять же, по крайней мере, в netbeans).

Поэтому я бы придерживался maven 2.x для производственных сборок и играл с maven 3.x для разработки.

person dfa    schedule 20.08.2009
comment
Приятно знать. Еще один плюс для перехода на Netbeans. Проверим это. Спасибо. - person Sten Roger Sandvik; 20.08.2009
comment
fwiw: m2eclipse и maven3 разрабатываются Sonatype параллельно. - person Brian Fox; 28.10.2009

Maven 2 и 3 отлично работают для меня над множеством проектов. В настоящее время я использую Maven 3 alpha 7, который работает очень хорошо, особенно в сочетании с плагином Eclipse Maven.

Maven легко интегрируется с Ant - в обоих направлениях. В моем текущем проекте мы вызываем Maven из Ant несколько раз, чтобы выполнить сложный интеграционный тест. Точно так же мы используем Ant через плагин Maven AntRun, а также написали наши собственные плагины Maven. Это, кстати, вопрос минут и сводится к написанию аннотированного Pojo.

Maven получает много критики, потому что многим разработчикам не нравятся правила или соглашения. Проще говоря, никто не заставляет вас использовать Maven. Если вы хотите полной свободы - любыми способами - переписывайте свой собственный процесс сборки для каждого проекта, к которому вы присоединяетесь. Однако, если вам нравится создавать программное обеспечение, а не заново изобретать колесо с индивидуальным процессом сборки для каждого проекта, выбирайте Maven.

person Christian    schedule 27.03.2010
comment
Это звучит как выбор между Maven или изобретением велосипеда, но это огромное заблуждение. Файл сборки Ant, который я использую в проектах сегодня, почти идентичен тому, который я использовал 8 лет назад. Это колесо, которое просто продолжает катиться. Напротив, Maven - это колесо, которое продолжает получать проколы. Не потому, что разработчикам не нравятся соглашения, которые они подвергают критике Maven. Они критикуют его, потому что иногда им нужно делать что-то необычное. - person KevinS; 23.10.2011

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

На данный момент maven-2 - хороший выбор для средних 2/3 проектов. Для действительно простых, муравей все еще в порядке. Для действительно сложных становится неизбежным гибрид maven-2 и других инструментов (например, antrun).

Не уверен, почему у вас проблемы с maven-2.

Он отличается от ant и buildr тем, что представляет собой инструмент для описания процесса сборки, а не его написания. Сложные сборки с несколькими динамическими частями и вложенными и / или временными зависимостями сложно построить, потому что их трудно описать.

person sal    schedule 20.08.2009

Попробуйте https://github.com/hackingspirit/Lattice Lattice. Я автор. Вот совок:

В Lattice файлы сборки пишутся не в XML, а на языке Python. Преимущества - гораздо лучшая читаемость и мощные сценарии императивной сборки, поддерживаемые Python. Для многомодульных проектов. Решетка использует топологическую сортировку, чтобы определить правильный порядок построения каждого модуля. Также планируется, что Lattice проанализирует зависимость модуля, чтобы определить, как компиляцию модуля можно распараллелить. Исходный код Lattice чрезвычайно скудный, в настоящее время он состоит примерно из 500 строк исходного кода Python.

person Zhenlei Cai    schedule 28.12.2010

Я думаю, что людям, жалующимся на Maven, следует потратить немного больше времени на изучение доступных плагинов. В ответ на комментарии, жалующиеся на то, что Maven является жестким и затрудняет использование настраиваемой логики сборки / обеспечивает детальный контроль над процессом сборки - я бы порекомендовал изучить плагин Ant для Maven (на самом деле их несколько, но вот один : http://maven.apache.org/plugins/maven-antrun-plugin). Я добился большого успеха в настройке сборок Maven с его помощью на протяжении многих лет. По сути, он позволяет вам запускать любую команду Ant как часть сборки Maven, и вы можете делать с Ant практически все;)

person Oleg K    schedule 14.05.2012
comment
Не стоит отвечать на вопросы 2009 года только для того, чтобы пожаловаться на жалобщиков. - person alestanis; 20.10.2012

Ant с Ivy выполняет то же управление зависимостями, что и Maven (фактически, он использует всю инфраструктуру управления зависимостями Maven, включая те же репозитории URL-адресов), но без всего беспорядка с конфигурацией POM.

Ant with Ivy может быть способом решения проблем с зависимостями для людей, которые действительно не хотят использовать Maven. Он решает 90% вещей, которые должен был решить Maven.

person David W.    schedule 02.06.2010
comment
Конечно, build.xml совсем не беспорядок и не кошмар, который нужно поддерживать :) - person Pascal Thivent; 02.06.2010
comment
Хорошо, позвольте мне показать вам некоторые сборки Ant, которые мне приходилось поддерживать в течение последних пяти лет, а затем вы можете сравнить их с эквивалентным файлом pom.xml. Шутки в сторону?! - person Tim O'Brien; 09.07.2010