java уроки структура - Почему maven? Каковы преимущества?




5 Answers

Выяснить зависимости пакетов на самом деле не так сложно. Вы редко это делаете. Возможно, один раз во время настройки проекта и еще немного во время обновлений. С maven вы в конечном итоге исправляете несоответствующие зависимости, плохо написанные посты и все равно делаете исключения пакетов.

Не так сложно ... для игрушечных проектов. Но проекты, над которыми я работаю, имеют много, очень многих, из них, и я очень рад, что они транзитивно, чтобы иметь стандартную схему именования для них. Управление всем этим вручную вручную было бы кошмаром.

И да, иногда вам приходится работать над конвергенцией зависимостей. Но подумайте об этом дважды, это не присуще Maven, это присуще любой системе, использующей зависимости (и я говорю о зависимостях Java вообще здесь).

Таким образом, с Ant вы должны выполнять ту же работу, за исключением того, что вам нужно все делать вручную: захват некоторой версии проекта A и его зависимостей, захват некоторой версии проекта B и его зависимостей, выяснение, какие именно версии они используют, проверка что они не перекрываются, проверяя, что они не являются несовместимыми и т. д. Добро пожаловать в ад.

С другой стороны, Maven поддерживает управление зависимостями и будет извлекать их транзитивно для меня и дает мне инструменты, необходимые для управления сложностью, присущей управлению зависимостями : я могу анализировать дерево зависимостей, управлять версиями, используемыми в транзитивных зависимостях, исключать некоторые из при необходимости, контролировать сходимость по модулю и т. д. Магии нет. Но, по крайней мере, у вас есть поддержка.

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

Медленный цикл FIX-COMPILE-DEPLOY-DEBUG, который убивает производительность. Это моя главная проблема. Вы вносили изменения, вам нужно подождать, пока maven build не начнет работать, и дождитесь его развертывания. Никакого горячего развертывания.

Во-первых, почему вы используете Maven как это? Я не. Я использую свою IDE для написания тестов, кода до тех пор, пока они не пройдут, не реорганизуют, не развертывают, не запускают и не запускают локальную сборку Maven, когда я это делаю, прежде чем совершать, чтобы убедиться, что я не сломаю непрерывную сборку.

Во-вторых, я не уверен, что использование муравьев будет намного лучше. И, по моему опыту, модульные сборки Maven с использованием двоичных зависимостей дают мне более быстрое время сборки, чем обычные монолитные сборки Ant. В любом случае, взгляните на Maven Shell на готовность (re) использовать среду Maven (кстати, это удивительно).

Так что, в конце концов, и я сожалею об этом, на самом деле это не Maven, который убивает вашу производительность, это вы злоупотребляете своими инструментами. И если вы недовольны этим, ну, что я могу сказать, не используйте его. Лично я использую Maven с 2003 года, и я никогда не оглядывался назад.

проекта пример

Каковы основные преимущества использования maven по сравнению с let's say ant? Кажется, это больше раздражает, чем полезный инструмент. Я использую maven 2, с простой Eclipse Java EE (без m2eclipse) и tomcat.

Сторонники maven считают, что

  1. Maven позволяет легко устанавливать ваши зависимости в пакетах

  2. Maven заставляет вас иметь стандартную структуру каталогов

По моему опыту

  1. Выяснить зависимости пакетов на самом деле не так сложно. Вы редко это делаете. Возможно, один раз во время настройки проекта и еще немного во время обновлений. С maven вы в конечном итоге исправляете несоответствующие зависимости, плохо написанные посты и все равно делаете исключения пакетов.

  2. Медленный цикл FIX-COMPILE-DEPLOY-DEBUG, который убивает производительность. Это моя главная проблема. Вы вносили изменения, вам нужно подождать, пока maven build не начнет работать, и дождитесь его развертывания. Никакого горячего развертывания.

Или я просто делаю это неправильно? Пожалуйста, укажи меня в правильном направлении, я все уши.




Выявление зависимостей для небольших проектов не сложно. Но как только вы начнете работать с деревом зависимостей с сотнями зависимостей, все может легко выйти из-под контроля. (Я говорю из опыта здесь ...)

Другое дело, что если вы используете IDE с инкрементной компиляцией и поддержкой Maven (например, Eclipse + m2eclipse), то вы должны иметь возможность настраивать / компилировать / горячее развертывание и тестирование.

Я лично не делаю этого, потому что я пришел к недоверию к этому способу развития из-за плохого опыта в прошлом (pre Maven). Возможно, кто-то может прокомментировать, работает ли это с Eclipse + m2eclipse.




Преимущество Maven перед муравьями довольно много. Я пытаюсь их обобщить здесь.

Конвенция по конфигурации
Maven использует отличительный подход для макета проекта и запуска, что упрощает просто переход в проект. Обычно для получения артефактов проекта требуется команда checkount и maven.

Модуляция проекта
Проектные соглашения предлагают (или лучше, вынуждают) разработчика модулизовать проект. Вместо монолитного проекта вы часто вынуждены делить свой проект на более мелкие субкомпоненты, что упрощает отладку и управление общей структурой проекта

Управление зависимостями и жизненный цикл проекта
В целом, с хорошей конфигурацией SCM и внутренним репозиторием, управление зависимостями довольно просто, и вы снова вынуждены думать с точки зрения жизненного цикла проекта - версии компонентов, управление выпуском и т. Д. Чуть более сложный, чем муравей, но опять же, улучшение качества проекта.

Что не так с maven?
Мавен нелегко. Цикл сборки (что делается и когда) не так ясен в POM. Также возникает проблема с качеством компонентов и отсутствием зависимостей в публичных хранилищах.
Наилучшим подходом (для меня) является наличие внутреннего хранилища для кэширования (и сохранения) зависимостей и применения для управления релизами компонентов. Для проектов, больших, чем примеры проектов в книге, вы будете благодарны maven до или после




Maven - это мощный инструмент управления проектами, основанный на POM (объектной модели проекта). Он используется для сборки проектов, зависимости и документации. Это упрощает процесс сборки, например ANT. Но он слишком продвинут, чем ANT. Maven помогает управлять - Builds, Documentation, Reporing, SCM, Releases, Distribution. - Репозиторий maven - это каталог упакованного файла JAR с файлом pom.xml. Maven выполняет поиск зависимостей в репозиториях.




Это должен был быть комментарий, но он не подходит для длины комментария, поэтому я разместил его как ответ.

Все преимущества, упомянутые в других ответах, достигаются более простым способом, чем использование maven. Если, к примеру, вы новичок в проекте, вы все равно потратите больше времени на создание архитектуры проекта, объединение компонентов, кодирование, чем загрузка банок и копирование их в папку lib. Если у вас есть опыт в вашем домене, вы уже знаете, как начать проект с каких библиотек. Я не вижу никакой пользы от использования maven, особенно когда это создает множество проблем при автоматическом выполнении «управления зависимостями».

У меня есть только знание уровня maven, но я говорю вам, что я сделал большие проекты (например, ERP) без использования maven.




Related