Чому Apache має два окремих інструменти для побудови та управління залежностями?


9

Apache має два окремих інструменти:

Вони ніби обидва заповнюють одну і ту ж нішу. У мене є два питання:

  1. Які основні моменти основних відмінностей між цими двома інструментами?
    • Я впевнений, що про різниці між ними можна написати дуже довгу статтю, я не шукаю такої деталі, і не шукаю суб'єктивного аргументу для вибору однієї іншої.
  2. Історія програмування - як сталося, що Apache еволюціонував, щоб створити два абсолютно окремих набори інструментів, які в кінцевому підсумку настільки схожі за призначенням?

Відповіді:


7

Які основні моменти основних відмінностей між цими двома інструментами?

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

    • Мейвен віддає перевагу конкретній структурі проекту: треба взяти на себе зобов’язання робити справи Шлях Мейвена. Maven постачається із загальними кроками збирання, вже налаштованими в корінь, pom.xmlякі зазвичай успадковуються усіма іншими проектами pom.xml.

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

  • Орієнтація

    • Мейвен орієнтований на ціль . Ви не кажете "виконати цю ціль збірки", ви просите її "скласти" або "розгорнути", і Maven робить все, що потрібно зробити, щоб потрапити туди: ви кажете, що хочете зробити.

    • Ant + Ivy орієнтована на завдання . Кожне завдання визначається реалізацією та на замовлення. Ви розповідаєте, як робити те, що ви хочете.

  • Управління залежністю

    • Мейвен відомий тим, що автоматично справляється із залежностями. Він завантажує правильні версії під час створення без будь-якої взаємодії з користувачем до тих пір, поки URL-адреси репозиторію будуть правильно налаштовані достроково.

    • У Ant немає управління залежностями, крім "Java Classpath". Айві додає управління залежністю, яке є трохи більш втомливим, ніж Мейвен, але все ж автоматизоване. Ключовим тут є те, що ви не можете керувати залежністю (наприклад, "банки, включені в мій дистрибутив або перевірені в джерело управління"), або ви можете передавати аутсорсинг через Ivy. Цей вибір означає більше гнучкості для задоволення потреб проекту.

  • Простота використання

    • Maven (теоретично) простий у використанні. Будь-який розробник може забрати проект Maven і одразу дізнатися, де знаходяться всі ресурси проекту та для чого вони призначені: це пов’язано з першим пунктом про Maven, який має певний спосіб робити справи.

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

  • Розширюваність

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

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

Як сталося, що Apache еволюціонував, щоб створити два абсолютно окремих набори інструментів, які в кінцевому рахунку настільки схожі за призначенням?

Перше, що потрібно зрозуміти, це проект Apache - це не що інше, як парасолька, під якою працюють окремі, незалежні проекти. Різні команди працюють над різними проектами. Незважаючи на те, що окремі розробники можуть працювати над кількома проектами, не існує загальної дорожньої карти, яка б включала Ant, Ivy та Maven.

Мураха прийшов першим. Він був розроблений як еквівалент Java на Make. Хоча Make може створювати проекти Java, це втомливо: Зробіть існування, щоб скласти купу одиниць компіляції окремо, а потім зв’яжіть їх. Спосіб Java - це javacзбирання всього за один раз, і те, що ми називаємо "зв'язуванням", справді відбувається в кишках JVM під час виконання. Make не був правильним інструментом для роботи: Makefile для Java - це в основному одна або дві цілі ( javac, jar).

Мураха додав трохи структури поверх Make, але принципово не змінив процес.

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

Однак Мурашка все-таки була справді корисною. Деякі проекти просто більше піддаються специфічній природі мурашиних процесів. Деякі проекти не складають код. Деякі проекти були давніми, і навряд чи хтось "модернізував" їх до Maven.

Поряд із Івві: він додає мурахам управління залежністю, надаючи проектам найкраще з обох світів. Ви можете зберігати свої застарілі сценарії чи дуже налаштоване середовище, але отримати найважливішу особливість Maven: управління залежністю.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.