Навіщо нам Maven або Ant, якщо ми вже маємо Eclipse?


76

Я думаю, що це питання є розширенням порівняння із IDE для Java, нам все ще потрібен Ant?

Є відповіді на вищезазначене питання, але я хотів би знати конкретний приклад використання Maven або Ant над Eclipse.

Коли я розробляю Eclipse, Eclipse робить все за мене, і мені просто потрібно натиснути кнопку запуску. А також, Eclipse може дозволити вам експортувати ваш код у запущений jar або навіть .exe для Windows.

Тож я справді не знаю, навіщо мені Maven чи Ant.

А також якщо мені це потрібно, кого з них вибрати, Мейвен чи Мураха?


7
Ви працюєте в команді?
Торбьорн Равн Андерсен

23
Ваша компанія вирішує, що вони хочуть мати автоматичний запуск збірки щовечора о 02:00. Ви хочете, щоб у цей час вам почали працювати, щоб перейти до процесу експорту у вашій IDE? Навіть у вихідні?
Donal Fellows

5
Я бачу, що так багато людей використовують Eclipse та Ant, не задаючи цього дуже важливого питання, яке задав Джексон. Шлях до Джексона! Проблема полягає в тому, що більшість людей / компаній настільки зайняті спробами перемогти конкуренцію, що у них немає часу на вивчення інструментів та методів, які можуть допомогти їм заощадити набагато більше часу.
Nav

2
Я схвалюю питання ... більшість розробників починають використовувати ці інструменти, навіть не замислюючись, чому ..
JanBo

1
Тож наступне гарне запитання: навіщо нам Eclipse?
Лундін,

Відповіді:


87
  1. Тому що ваш колега може віддати перевагу NetBeans або IDEA
  2. Оскільки налаштування можуть відрізнятися в залежності від встановлення eclipse
  3. Тому що, можливо, ви захочете отримати свої залежності автоматично
  4. Оскільки ви хочете автоматизувати повну збірку: побудувати, jar, застосувати статичний аналіз коду, запустити модульні тести, сформувати документацію, скопіювати в якийсь каталог, налаштувати деякі властивості залежно від середовища тощо.
  5. Оскільки, як тільки це буде автоматизовано, ви можете використовувати систему безперервної інтеграції, яка створює додаток при кожній зміні або щогодини, щоб переконатися, що все ще будується, а тести все ще проходять ...
  6. Оскільки Maven використовує домовленість над конфігурацією.
  7. Оскільки ваша IDE може не підтримувати якесь вишукане створення / перетворення коду, яке вам потрібно.
  8. Оскільки сценарій збірки документує процес збірки.

Eclipse - середовище розвитку. Але це не інструмент побудови.

Я особисто ненавиджу Maven, але YMMV. Є багато альтернатив: gradle, buildr тощо.


3
6. тому що eclipse може не підтримувати якесь вигадливе генерування / перетворення коду, яке вам потрібно (оскільки воно може лише компілювати)
piotrek

2
Eclipse - середовище розвитку. Але це не інструмент побудови. Ні, Eclipse - фіктивний інструмент збірки: P
yorkw

5
Я новачок Java EE, але дотепер мені вдалося без проблем створити WAR із Eclipse та розгорнути на віддалених веб-серверах. Називайте мене божевільним, але я люблю робити речі простими, і ці інструменти побудови, здається, все, але ...
Денніс,

1
Комусь потрібно виділити другий момент: 2. Оскільки налаштування можуть відрізнятися в залежності від встановлення eclipse . Для ANT ви дізнаєтесь один раз . Для Eclipse ви вивчаєте один раз для кожної версії та вирішуєте всі дивні тонкощі та помилки, якими так славиться Eclipse.
Pacerier

6. Оскільки Maven використовує домовленість щодо конфігурації. Це корисно не лише для інструментів, а й для розробників, оскільки вони знають, де що шукати. Я вже бачив проекти з декількома каталогами коду в src - один з них test.
Губерт Гжесковяк

11

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

Просто об’єктне середовище повинно мати усі об’єкти класу, тобто об’єкти, що визначають типи об’єктів, доступні системі, діючі та доступні постійно. Звідти я можу робити все, що завгодно, створювати екземпляри декількох об'єктів класу, встановлювати різні послідовності та правила створення екземплярів тощо. Оскільки середовище має бути повністю активним, мені не потрібноінструмент побудови взагалі. Що стосується розгортання мого додатка, для середовища не складно просто викинути всі об'єкти класу, на які ніколи не посилається код у просторах імен, з яких складається моя програма. Сьогодні збирач сміття в JVM робить майже те саме на льоту. На той момент у мене є середовище розгортання, яке складається з моїх об'єктів та всіх об'єктів (насамперед об'єктів класу), на які посилаються мої об'єкти, тобто моє додаток та всі залежності. Так працюють віртуальні машини. (що наші віртуальні машини так погано написані, що нам потрібно запустити Spring VM на Java VM на Linux VM на VMWare VM на іншій Linux VM - ще один приклад ідіотизму розробки програмного забезпечення). Коли залежності оновлюються, середовищу досить просто запропонувати розробнику об’єднати свій старий код з новими бібліотеками, злийте код, використовуючи нові бібліотеки, до попередньої версії або збережіть обидві версії. Підказка заохочує розробника внести невеликі модифікації, які іноді необхідні, щоб уникнути наявності двадцяти версій кожної бібліотеки, тоді як такі інструменти, як Maven, приховують той факт, що у вас є двадцять версій, і це призводить до масового роздуття, поширеного в додатках Java.

У просторі розробки Java Eclipse найближче наближається до належного об'єктного середовища, хоча надається безліч плагінів, які різними способами порушують парадигму. Більшість причин, наведених для використання Maven, розпадаються при критичному дослідженні.

Netbeans та Idea - це надмірні текстові редактори, а не об'єктні середовища, але якщо ви хочете використовувати їх інструменти для чогось, що не охоплюється тисячами плагінів Eclipse, обидва можуть імпортувати та підтримувати проекти Eclipse, ваша збірка буде просто надто повільною в порівнянні з розробниками за допомогою Eclipse, але тоді вони були б такими повільними, якби вони були чистими проектами Netbeans чи Idea.

Не серйозна причина використовувати Maven.

Легкість експорту / імпорту налаштувань у Eclipse (що в будь-якому випадку повинна робити кожна команда в будь-якій IDE) робить різні налаштування проблемою не більше, ніж лінь з боку команди розробників (або релігійні суперечки щодо пробілів проти табуляції, ха-ха) .

Знову ж таки, не серйозна причина використовувати Maven.

Командне середовище? Покажіть мені команду, яка ще не використовує сховище, таке як GIT або SVN. Чому нам потрібно дублювати як функціональні можливості, так і головний біль технічного обслуговування, також налаштувавши репозиторії Nexus?

Це насправді є вагомою причиною НЕ використовувати Maven.

Запуск збірки сервера? Чудова ідея, чи не слід це розпочинати кодом, який насправді реєструється у вихідному репо, а не випадковою збіркою, яка випадково потрапляє до Nexus? Це піднімає очко проти Git, особливо Git з Maven. Оскільки в Git я не працюю над гілкою, тестую локально, потім виконую коміт (частково тому, що мій локальний тест не доводить, що збірка сервера працює через різницю в конфігурації Maven в Jenkins та Eclipse), я повинен внести свої зміни до іншу гілку, щоб побачити, що сервер Maven не працює, потім виконайте подальші зміни, щоб усунути проблему, що призведе до нечитабельної історії джерел у репо. Перевірений код повинен як мінімум будувати та проходити модульні тести, які, якщо Git та Maven не потрапляють у картину, повинні бути гарантовані.

Експорт безголової збірки з Eclipse тривіальний, якщо ви насправді заглянете в неї - все, що вам потрібно - це ant або Gradle, збірка розробника, яка вже підтримується Eclipse, і кілька банок Eclipse (Eclipse експортує всі необхідні файли для безголової збірки до каталог або ZIP-файл, або ftp їх на сервер збірки). Інструменти побудови серверів, такі як Хадсон / Дженкінс, можуть витягувати оновлений код з більшості вихідних репозиторіїв і викликати будь-який сценарій збірки, немає залежності від Maven. За допомогою Maven ви або змушуєте розробників використовувати інструмент, який не підходить нікому, крім інженерів збірки (для створення випадку достатньо великих розмірів, навіть якщо використовується M2E), або ви живете з можливістю побудови сервера працює не так, як побудова робочої станції, яка досівірно, якщо ви пройдете всі клопоти з інтеграцією цих двох, використовуючи безліч плагінів M2E. У будь-якому випадку ви отримуєте повільнішу та крихкішу побудову робочої станції заради настільки ж повільної та більш крихкої побудови сервера. У кожному проекті, заснованому на Maven, над яким я працював, я бачив тимчасові помилки Гудзона / Дженкінса, які не відображаються в Eclipse, якщо у вас не встановлено та не налаштовано абсолютно всі можливі плагіни M2E, і більшість розробників цього ніколи не роблять.

Здається, ще одна чудова причина уникати Мейвена.

Це не охоплює деяких найбільш фундаментальних проблем Maven, таких як простори імен, що порушують простори імен Java та простори імен XML, це модуль побудови (POM), який не має відношення ні до чого у фактичному середовищі розгортання (подумайте про це, коли ви розділите через POM, що ви насправді досягаєте в готовому продукті? Нічого. Все, що воно робить, - це хибне відчуття того, що ви розділили проблеми та функціональність на різні одиниці побудови, які всі працюютьяк один монолітний фрагмент коду); клопоту з ручним веденням складних конфігураційних файлів, що погіршується лише в тому випадку, якщо вам довелося використовувати OSGi або інший контейнер і вам доводиться підтримувати інші конфігураційні файли, які впливають на конфігурацію Maven і на які впливають, з дуже мало очевидним сенсом для цього; проблеми, викликані спробою запустити модульні тести без повного середовища для виконання коду; незліченна кількість версій не лише залежностей, але й конкретних плагінів Maven (насправді я бачив пекло JAR у самій побудові Maven , де кілька плагінів Maven використовували суперечливі залежності - одна із проблем, яку мав вирішити Maven .

Так, ви можете створити об'єктний код за допомогою Maven. Ви також можете написати чистий об'єктний код на мові C або навіть на асемблері, але я не знаю, чому ви цього хочете.

Найкраща причина уникати Maven - це феноменальний обсяг роботи, необхідний для демавінізації набору проектів, коли ви захворіли на всі зазначені вище проблеми (та численні інші, про які не згадували).

Мислення, успадковане від розробки С, що цикл розробки складається із запису коду, компіляції, збірки, побудови, розгортання, тестування, повторення заново, безнадійно застарів в об'єктному середовищі. У якийсь момент нам потрібно сказати всім людям із таким мисленням, що вони повинні навчитися розвиватися, крапка. Це всуне будь-яку потребу в Maven, Git та безлічі інших інструментів, які не роблять нічого, крім як марно витрачати час.

Розробка об'єкта повинна здійснюватися в середовищі реального об'єкта, де тестується зміна коду в міру збереження, оскільки модифікований об'єкт працює. Розгортання повинно складатися з видалення з цього середовища лише артефактів розробки, створення середовища виконання, яке містить усе, що використовує запущена програма у розробці та тестуванні.

Зараз я маю справу з проблемою, спричиненою створенням збірок розгортання для програми OSGi за допомогою плагіна maven-Assembly. Додаток чудово працює в середовищі Eclipse, яке гаряче розгортає всі зміни коду в запущений контейнер OSGi всередині середовища. Однак конфігурація не виживає цілою в процесі складання maven, незважаючи на наявність дуже хорошого інженера конфігурації / збірки, єдиною роботою якого є виконання цього процесу. Якби ми позбулися Maven (дуже складно зараз через кількість коду, але можливо) і використали плагін BNDTOOLS Eclipse, ми могли б просто експортувати збірку Eclipse як Ant або Gradle безголову збірку (зверніть увагу, розробники OSGi, які пишуть BND та BNDTOOLS цього не роблятьпідтримує Maven, і з поважної причини плагін Maven написаний розробниками Felix, які самі використовують Netbeans і Maven, і жодне інше середовище, крім кінця циклу розгортання), де обидва інструменти налаштовують те саме середовище, що і Eclipse, без об’єктів графічного інтерфейсу, які в будь-якому випадку призначені лише для розробників. Результатом буде однакова конфігурація та збірка для розгортання. Це дозволило б заощадити 2-3 години на день для розробника, який зараз витрачається на перегляд повільних збірок Maven або M2E, і звільнити інженера конфігурації / збірки, щоб зробити більше тестування програми на хостах розгортання.

Подолання мислення write / compile / assemble / build / deploy / test є єдиною головною перешкодою. Прикидання, що ви кодуєте на терміналі VT100 1979 року замість сучасної машини, не робить вас «справжнім» розробником, це лише демонструє, що ваші методи застаріли на 35 років.

З розробників в команді ніхто з інших не розуміє належним чином середовище реального об'єкта, як Eclipse, настільки, щоб змусити його працювати як живе середовище з M2E та OSGi, і вони є найкращими розробниками, вони просто не зазнавали цього через до поширеності застарілих засобів розробки командного рядка. Вони зрозуміли, що це можливо зробити, коли ми поєднували програмування для вирішення проблеми конфігурації, і я ділився своїм екраном, змушуючи одного з інших членів команди вигукнути " це як ти пишеш код так чортово швидко ", коли він побачив, як мій код миттєво тестується у фоновому контейнері OSGi. Я можу використовувати оболонку bash, коли мені потрібно, наприклад, коли я переглядаю журнали на віддаленому сервері, в Насправді я роблю це досить ефективно точно, щоб я міг якнайшвидше вийти з цього середовища і повернутися в 21 століття.


1
Як експеримент у колишній компанії, після демавінізації збірки, у нас була одна команда, яка продовжує збірку Maven, а інша використовувала збірку Eclipse. Збірка Maven врятувала інженера-розробника приблизно 30 хвилин на місяць. Однак це коштувало майже 3 години на день на розробника, що коштувало Maven проти побудови Eclipse.
Дас Річардсон,

Ми випробували ці інструменти, і вони все більше проблем, ніж вони варті. Я шкодую лише про те, що я маю лише один голос, який я повинен вам дати.
Вінсент

1
"ваша збірка буде просто надмірно повільною в порівнянні з розробниками, що використовують Eclipse" доказ або редагування
Губерт Гжесковяк

9
Ця відповідь - це величезна купа думок, у якій немає жодного посилання чи доказу ні на що.
Губерт Гжесковяк,

Глибоко вдихніть і порахуйте до 10. Краще? Ви розробник Eclipse чи фанат Eclipse чи щось інше?
Натан Адамс,

6

Існує дуже багато переваг використання Ant або Maven.

Maven - це більш-менш оновлена ​​концепція Ant. Замість того, щоб дати вам крапкову відповідь, я вирішив застосувати інший підхід до відповіді на це питання. Я задам вам просте запитання. Я тут припускаю, що ви були б розробником; або мають якийсь досвід програмування ОО.

Отже, якщо ваш менеджер мав попросити вас скопіювати двісті каталогів, але ігнорувати jar, war and earфайли в цих каталогах і один раз скопіювати. Потім ви розгортаєте ці двісті каталогів в інший пункт призначення, але розгортаєте лише .classфайли; скопіювати решту файлів в інший пункт призначення тощо.

Для вас, щоб зробити це в Java; це буде багато логіки, багато коду і не буде розширюваним або пристосованим до змін. Таким чином, на увазі Ant або Maven виконають і підготують все це на льоту з меншими витратами для використання вашої програми. Розмір коду в ant або Maven буде 1/4порівняно з Java.

Клацніть на посилання, щоб отримати більше технічних переваг:

Мейвен

Ant, я не зміг знайти справжню відповідь із перевагами, але я впевнений, що це вас переконає;)


5

Maven і Ant використовуються для побудови сценаріїв, щоб їх можна було виконувати в пакетних роботах, як у Дженкінса або в командному рядку.

Насправді сам Eclipse широко використовує Ant для створення плагінів.

Якщо ви хотіли б навчитися одному з двох, вивчіть Maven, це той, яким сьогодні користуються всі (замінюючи Ant).


2
gradle досить популярний, зараз він використовується в андроїд-студії
barlop

2

Maven, як правило, використовується для створення плагінів або банок для певного додатка.

Припустимо, ви розробили додаток, але не хочете додавати банки, необхідні для цього додатка вручну. У цій ситуації Maven або Ant дуже допомагають. Після того, як ви написали свій код, щойно запустили Запустити як -> Maven Build (клацніть на Maven Build), він згенерує всі необхідні плагіни або банки та включить у шлях до збірки бібліотеки додатків. Може виникнути сумнів, як те, як програма отримає ці баночки. Для кожної програми існує файл xml з іменем POM.xml, де там зберігаються посилання на всі банки для завантаження.

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