четверг, 21 ноября 2013 г.

Менеджеры репозиториев Maven

Часто приходится копировать в локальный maven репозиторий различные зависимости, которые отсутствуют в публичных репозиториях. 

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

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

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

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

На помощь приходят внутренние (internal) репозитории, управляемые менеджерами репозиториев. Наиболее популярными менеджерами репозиториев являются Archiva от Apache Foundation, Artifactory от JFrog и Nexus от Sonatype.

Внутренние репозитории используются не только как шлюз  для хранения копий артефактов из публичных репозиториев. В них также приходиться делать deploy (в терминах maven) собираемых библиотек и приложений. 

Репозитории используется также для построения конвейеров (Deployment Pipeline в терминологии методологии Continuous delivery). Хочу порекомендовать статью Deployment Pipeline на практике, которая описывает практическую реализацию Deployment Pipeline. В ней также поднята тема  использования репозиториев артефактов (maven репозиториев) для этих целей.



В данной статье мы не будем углубляться в сравнение данных менеджеров репозиториев. Сошлюсь только на статью Maven Repository Manager Feature MatrixВ ней проводится сравнение менеджеров репозиториев для хранения артефактов сборки. Сравниваются три наиболее популярных менеджера. Сравнение периодически обновляется по мере выхода новых версий.