Когда я впервые начал использовать Java, Maven еще не существовало. И под этим я подразумеваю, что Maven 1.0 Beta 2 – самая старая запись на странице истории выпусков Apache Maven – еще не была выпущена. Ant 1.1 был выпущен несколькими месяцами ранее, но я тоже никогда им не пользовался. Тогда он выполнял команды вручную или с помощью Make.
Перенесемся немного вперед к тому моменту, когда я впервые использовал Java за пределами Uni, и теперь существовал Maven 2.0.4, и первый проект, над которым я работал, использовал его. И это было действительно больно. Вам пришлось написать много сложного XML и найти свои зависимости в репозитории Maven – или же вручную загрузить их на свой собственный веб-сервер с правильными файлами метаданных и всевозможными сложными вещами, просто чтобы получить что-то для сборки. У вас даже не было свободы размещать свои файлы там, где вы хотели – это диктовало, куда они должны идти. Это резко отличалось от всего, к чему я привык раньше, и это было ужасно. Но я выстоял, и я научился принимать это и привыкать к его особенностям.
Снова вперед, и теперь у нас есть множество вариантов. Maven все еще существует и развивается, но у нас есть значительно улучшенные версии Ant, а также Gradle, SBT, Leiningen и, возможно, другие. И все же в наши дни я лично предпочитаю Maven всем этим.
Для этого есть две причины:
Очевидный из них – это то, как они настроены. Ant получает список инструкций для выполнения. Gradle, SBT, Leiningen и т.д. Предоставляются скрипты, написанные в реальном коде для настройки системы сборки. Maven предоставляется простой документ, описывающий сборку. В XML нет ничего волшебного. Он не делает ничего умного. В него не встроена поддержка кодирования, чтобы использовать его в своих целях. Это всего лишь документ. И, как таковые, все конфигурации Maven работают одинаково. Ты можешь взять с собой кого угодно другого pom.xml файл, прочитайте его и знайте, что он будет делать. Вам не нужно размышлять о том, что этот умный кусочек Groovy или Scala собирается сделать с конечным результатом.
Однако для меня это не самое главное. Самый большой из них – это Зрелость. Maven теперь – это тот, которому каждый должен соответствовать. Таким образом, если вы хотите сделать что-то необычное, скорее всего, Maven будет поддерживать это с меньшими усилиями и большим количеством примеров. Вы, конечно, можете заставить других делать все, что угодно, потому что они написаны по сценарию. Вы можете делать с ними все, что угодно . Но иногда для достижения этого требуется очень много усилий.
В качестве примера – тот, который я часто использую, потому что он такой нелепый. Когда я впервые начал играть с Gradle, не было никакой поддержки для “предоставленной” области. Не было простого способа создать приложение, которое зависело бы от Jar-файла во время компиляции, с которым оно не должно было быть связано, например, с API Servlets. Были способы добиться этого, написав дюжину или около того строк Groovy в вашем скрипте сборки, используя функции, которые были плохо документированы, если вообще были, против API, который менялся с каждым выпуском, но это было болезненно и хрупко.
Скорее всего, в конечном итоге мне придется перейти на Gradle, и я привыкну к этому, и все будет хорошо. В наши дни очень много проектов используют Gradle вместо Maven, потому что, честно говоря, он делает очень хорошую работу по упрощению простых сборок. Но для Мейвена всегда найдется место рядом со мной.
1) С оговоркой, что там так много всего, почти наверняка люди используют разные подмножества опций.
Оригинал: “https://dev.to/grahamcox82/why-i-like-maven”