Дело против Мавена? - PullRequest
3 голосов
/ 12 марта 2010

Снова и снова я читал и слышал, как люди разочарованы из-за Мейвена и его сложности И что для построения кода гораздо проще использовать Ant.

Однако, чтобы:

  1. Код компиляции
  2. Выполнить тесты
  3. Пакет развертываемой единицы

Это все, что вам нужно от Maven:

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>type something here</groupId>
  <artifactId>type something here</artifactId>
  <version>type something here</version>
</project>

Каким будет соответствующий минимальный файл сборки Ant?

Ответы [ 4 ]

8 голосов
/ 12 марта 2010

Как говорит Аарон , проблема с Maven не в том, как он работает, а в том, как он выходит из строя.

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

Maven «решает» проблему зависимостей, делая зависимости динамическими и, следовательно, избегает значительных начальных затрат и облегчает изменение зависимостей. Стоимость этой гибкости сложность. Maven превращает вашу сборку в распределенную систему и при этом нарушает многие из 8 ошибок распределенных вычислений . Некоторые из этих проблем - проблемы больше в теории, чем на практике. Например, я не знаю ни о каких случаях взлома репозиториев Maven, но это не значит, что вам не нужно знать о последствиях для безопасности. Другие проблемы с удаленными репозиториями, такие как надежность, пропускная способность и задержка, являются более частыми причинами неудовлетворенности Maven .

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

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

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

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

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

6 голосов
/ 12 марта 2010

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

Проблема, конечно, в том, что не все вписывается в заранее определенный фрейм, поэтому необходимо сделать что-то конкретное, инструменты типа ant (для которых все специфично, в любом случае) сияют: есть без разницы, вы просто опишите, что вам нужно. Насколько я понимаю, это обычная жалоба людей на maven. С другой стороны, maven не предотвращает настройку , поэтому его можно настроить и при необходимости использовать ant.

Я бы предпочел maven для нового проекта, потому что я могу следовать разумным соглашениям maven, но использую скрипты ant build для существующих проектов.

UPDATE

Исправление: для существующих проектов я бы долго и пристально смотрел на переход на maven и только потом, если меня действительно толкнули к стене, использовал муравья. Чем больше я использую maven, тем больше я осознаю, насколько ценным он действительно является и как трудно его оправдать: незаменимые полезные плагины (т.е. не строительные блоки, как в случае с ant), стандартизация (у юниоров нет проблем с прыжком новый проект и строительный код), управление зависимостями, интеграция с Hudson / Jenkins ... трудно оправдать муравей больше, за исключением экстремальных сборок с окончанием жизненного цикла проекта, по крайней мере, для типов проектов, над которыми я работаю.

4 голосов
/ 12 марта 2010

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

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

Также, если в Maven отсутствует функция, мне нужно написать целый плагин или использовать плагин antrun.

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

3 голосов
/ 13 марта 2010

Вы уже знаете ответ (очень ориентированный текст) на ваш вопрос: не существует Ant, эквивалентного этому минимальному POM, потому что, в отличие от Maven, Ant не определяет набор стандартов, шаблонов, соглашений, другими словами lingua franca или общий язык для управления проектами , что позволило бы Ant не победить Maven в этом примере.

Делает ли это Ant более сложным, чем Maven? Почему-то да, и я считаю, что большинство жалоб на сложность Maven связано с невежеством («Я хорошо знаю Ant, я знаю, как делать вещи в Ant, Ant прост, я не знаю, Мэйвен, я не понимаю, я не знаю, как делать вещи, я чувствую себя потерянным, я чувствую себя стесненным, я не хочу изучать это, Мэйвен сложен ".) и FUD. Но Maven и Ant настолько отличаются, что нет смысла сравнивать их (а Maven по-прежнему намного больше, чем Ant + управление зависимостями).

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

Так что в конце (здесь без обид) такие вопросы ничего не меняют, и я просто процитирую Ребята из Maven и Ant: вы никогда не согласитесь. На что угодно. Период. Смирись с этим!. (настоятельно рекомендуемый пост), чтобы сделать вывод:

Все, что я говорю, это: прекрати разглагольствовать. Либо придумайте неабстрактные решения, либо заткнитесь. Рантинг это легко. Придумывать решения, используя свои собственные решения, меньше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...