Які основні моменти основних відмінностей між цими двома інструментами?
Структура проекту
Мейвен віддає перевагу конкретній структурі проекту: треба взяти на себе зобов’язання робити справи Шлях Мейвена. 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: управління залежністю.