Как говорит Аарон , проблема с 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 в том, что он надежен, обычно приводит к повторяющимся сборкам и хорошо документирован.