Почему в Apache есть два отдельных инструмента для управления сборкой и зависимостями?

9

Apache имеет два отдельных инструмента:

Кажется, они оба занимают одну и ту же нишу. У меня есть два вопроса:

  1. Каковы основные моменты основных различий между этими двумя инструментами?
    • Я уверен, что можно было бы написать очень длинную статью о различиях между ними, я не ищу таких подробностей, и при этом я не ищу субъективного аргумента для выбора одного из них.
  2. История программирования - как случилось, что Apache эволюционировал, чтобы создать два совершенно отдельных набора инструментов, которые в конечном итоге так похожи по своему назначению?
durron597
источник

Ответы:

7

Каковы основные моменты основных различий между этими двумя инструментами?

  • Структура проекта

    • Maven предпочитает конкретную структуру проекта: нужно совершать действия The Maven Way. Maven поставляется с общими шагами сборки, уже настроенными в корне, pom.xmlкоторый обычно наследуется всеми другими проектами pom.xml.

    • Ant + Ivy более открыт: хотя он может многое, но есть только несколько основных требований с точки зрения структуры проекта или использования сценариев. Нет заранее определенных задач, целей или процессов сборки. Каждый из build.xmlних - чистый лист (если не включать другой сценарий, конечно).

  • ориентация

    • Maven ориентирован на цель . Вы не говорите «выполнить эту цель сборки», вы просите его «собрать» или «развернуть», и Maven делает все, что нужно для достижения цели: вы говорите, что хотите сделать.

    • Ant + Ivy ориентирован на задачу . Каждая задача определяется реализацией и является индивидуальной. Вы говорите, как делать то, что вы хотите.

  • Управление зависимостями

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

    • У Ant нет управления зависимостями, кроме «Java Classpath». Айви добавляет управление зависимостями, которое немного утомительнее, чем Maven, но все же автоматизировано. Ключевым моментом здесь является то, что вы можете выбрать отсутствие управления зависимостями (например, «jar-файлы, включенные в мой дистрибутив или проверенные в контроле исходного кода»), или вы можете передать его через Ivy. Этот выбор означает большую гибкость для удовлетворения потребностей проекта.

  • Простота использования

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

    • У Ant + Ivy может быть более крутая кривая обучения, потому что каждый проект может быть различным. Разные проекты могут иметь разные способы достижения одних и тех же целей.

  • растяжимость

    • Maven позволяет писать плагины и изменять процесс сборки. Однако он выходит из коробки с корнем, pom.xmlкоторый подталкивает разработчиков к заранее заданным процессам сборки. Новые цели или этапы сборки требуют тщательного обдумывания и дополнительных усилий для внедрения в процесс сборки.

    • Ant + Ivy также позволяет писать плагины и новые задачи: это довольно просто, и можно интегрировать новую задачу с минимальными усилиями. Нет заранее определенных целей или задач, которые можно было бы перемешать или интегрировать в новую задачу.

Как случилось, что Apache эволюционировал, чтобы создать два совершенно разных набора инструментов, которые в конечном итоге так похожи по своему назначению?

Первое, что нужно понять, это проект Apache - не что иное, как зонтик, под которым работают отдельные, независимые проекты. Разные команды работают над разными проектами. В то время как отдельные разработчики могут работать над несколькими проектами, не существует какой-либо общей дорожной карты, включающей в себя Ant, Ivy и Maven.

Муравей пришел первым. Он был разработан, чтобы быть Java-эквивалентом Make. Хотя Make может создавать Java-проекты, это утомительно: Make существует для компиляции нескольких модулей компиляции, а затем связывает их. Способ Java состоит в том, чтобы javacкомпилировать все за один раз, и то, что мы называем «связыванием», действительно происходит в кишечнике JVM во время выполнения. Make не был подходящим инструментом для работы: Makefile для Java - это одна или две цели ( javac, jar).

Ant добавил немного структуры поверх Make, но принципиально не изменил процесс.

Через некоторое время сообщество пришло к пониманию, что выискивать файлы с банками было не весело. Кроме того, не было стандартного способа составления проектов. Без согласованности разработка Java была беспорядочной. Maven был разработан для решения этих проблем: он привел бы к общей структуре проекта и автоматизировал поиск файлов jar.

Тем не менее, Ant все еще был действительно полезен. Некоторые проекты просто больше подпадают под специальную природу процессов Ant. Некоторые проекты не компилируют код. Некоторые проекты были старыми, и вряд ли кто-то «обновит» их до Maven.

Вместе с Айви: он добавляет управление зависимостями в Ant, предоставляя проектам лучшее из обоих миров. Вы можете сохранить свои устаревшие сценарии или настроенную среду, но получите самую важную функцию Maven: управление зависимостями.


источник