Советы по поддержанию внутреннего репозитория Maven?

StackOverflow https://stackoverflow.com/questions/1039362

Вопрос

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

Каким рекомендациям должны следовать пользователи при настройке стандартов загрузки или публикации собственных артефактов в репозитории при выпуске своего кода?Какие виды управления/правила у вас есть для такого рода вещей?Что вы включаете об этом в руководство/документацию для разработчиков?

ОБНОВЛЯТЬ:Мы запустили Nexus и остались им очень довольны: следовали большинству рекомендаций Сала и не столкнулись с какими-либо проблемами.Кроме того, мы ограничили доступ к развертыванию и автоматизировали сборку/развертывание артефактов моментальных снимков через сервер Hudson CI.Hudson может анализировать все зависимости вышестоящего и нисходящего проекта, поэтому, если проблема компиляции, сбой теста или какое-либо другое нарушение приведет к сбою сборки, развертывание не произойдет.Утомляйтесь развертыванием моментальных снимков в Maven2/Maven3, поскольку метаданные между двумя версиями изменились.Стратегия развертывания моментальных снимков «Только Hudson» позволит смягчить эту ситуацию.Мы не используем Release Plugin, но написали кое-какую сантехнику вокруг него. Плагин версий когда собираемся переместить снимок в выпуск.Мы также используем m2eclipse, и кажется, что он очень хорошо работает с Nexus, поскольку из файла настроек он может видеть Nexus и умеет индексировать информацию об артефактах для поиска оттуда.(Хотя мне пришлось настроить некоторые из этих настроек, чтобы он полностью индексировал наши внутренние снимки.) Я также рекомендовал бы вам развернуть исходный jar-файл с вашими артефактами в качестве стандартной практики, если вы заинтересованы в этом.Мы настраиваем это в супер POM.

ОБНОВЛЕНИЕ2:я сталкивался этот технический документ Sonatype в котором подробно описаны различные этапы внедрения/зрелости, каждый из которых имеет разные цели использования для менеджера репозитория Maven.

Это было полезно?

Решение

Я бы порекомендовал установить один сервер Nexus с как минимум четырьмя репозиториями. Я бы не рекомендовал артефакт. Бесплатная версия Nexus отлично подходит для разработчиков менее 20 в менее чем трех группах. Если у вас больше пользователей, чем это, сделайте себе одолжение и заплатите за выпуск Sonatype. Интеграция с LDAP окупается.

<Ол>
  • Внутренняя версия
  • Внутренний снимок
  • Внутренняя третья сторона для кода, используемого в доме, который поступает из внешних источников, или для одобренных сторонних версий. Разместите здесь драйверы JDBC, javax. * И другие материалы от клиентов и партнеров.
  • Внешние прокси - общий прокси для всех обычных источников, таких как m2, codehaus и т. д.
  • Настройте Nexus для выполнения следующих действий для внутренних репозиториев

    <Ол>
  • Регулярно удаляйте старые снимки
  • Удалить снимки при выпуске
  • Создание индексных файлов. Это также ускоряет локальные сборки
  • У вас есть общий файл settings.xml, в котором используются эти четыре и только эти четыре источника. Если вам необходимо выполнить настройку за пределами этого, попробуйте сохранить общую часть настроек запишите и используйте профили для различий. Не позволяйте вашим клиентам просто создавать свои собственные настройки, иначе вы получите код, который создается на одном компьютере, но не на другом.

    Предоставьте общий прокси для ваших клиентов. В Nexus вы можете добавить несколько прокси к общим источникам Maven (Apache, JBoss, Codehaus) и иметь один прокси, доступный для внутренних клиентов. , Это значительно упрощает добавление и удаление источников из ваших клиентов.

    Не смешивайте внутренние и сторонние артефакты в одном и том же хранилище. Nexus позволяет добавлять файлы JAR во внутренний репозиторий через веб-интерфейс. Я рекомендую это как способ добавления ваших драйверов JDBC и другого внешнего кода третьим лицам. Пользовательский интерфейс довольно удобен в использовании по сравнению с большинством корпоративных программ .

    Определите общий родительский POM , который определяет внутренний снимок и выпускает репозитории через тег distributionManagement . Я знаю, что многие люди говорят вам не делать этого. И хотя я свободно признаю, что с этим возникают всевозможные проблемы, все будет хорошо, если клиенты будут создавать только выпуски и снимки для развертывания в одном внутреннем репозитории.

    Если у вас есть неправильно управляемый репозиторий Maven , создайте 5-й репозиторий с именем Legacy и поместите туда все репозитории. Установите задачу cron для удаления старых файлов из старых, когда им исполнился год. Это дает всем год, чтобы уйти от этого и обновить свои poms.

    Установите соглашение о присвоении имен для внутренних артефактов. Я предпочитаю GroupID Department.Function.Project и ArtifactId для этого componentName . Для внутренних репозиториев, com / org / net и название компании, скорее всего, не будут иметь значения. И неправильно, если компания меняет название. Гораздо менее вероятно, что отдел продаж, бухгалтерии или инвентаря будет переименован.

    Другие советы

    Обязательно используйте Нексус.:П

    Я использовал и Nexus, и Artifactory.Интерфейс Nexus намного более надежен, его гораздо легче настраивать и, конечно же, он написан Сонатип, который хорошо понимает почти все Maven.

    При этом Artifactory достойна и работоспособна.

    Используйте Artifactory .

    Я сам использую Artifactory, мне нравится пользовательский интерфейс и простота развертывания / обслуживания. Тем не менее, я никогда не использовал Nexus и не могу помочь вам в правильном сравнении функций.

    Вот некоторые вещи, которые мне очень нравятся в Artifactory (имейте в виду, что у Nexus тоже могут быть эти функции):

    <Ол>
  • Хороший интерфейс Web 2.0.
  • Возможность импортировать ваш локальный репозиторий Maven, чтобы помочь вам начать работу.
  • Простота интеграции с существующими серверами LDAP для обеспечения безопасности (я большой поклонник единого хранилища для хранения учетных данных).
  • Учитывая, что на самом деле есть только две основные реализации репозитория Maven, если вы действительно хотите убедиться, что сделали правильный выбор, я бы порекомендовал попробовать оба варианта и решить для себя, что вам больше нравится.

    Возможно, это очевидно, но для воспроизводимости разработчики никогда не должны перезаписывать артефакты, они должны быть новыми версиями.

    Это также относится к вышестоящим репозиториям. Если вы загружаете Apache-commons версии 1.2.3, вам никогда не следует загружать его снова. Исправления приходят из последних версий, не применяются к существующим версиям.

    Что еще нужно учитывать:

    http://archiva.apache.org/

    В качестве ОРИГИНАЛЬНОГО ВОПРОСА (технические проблемы, которые следует учитывать при создании хранилища M2), я бы порекомендовал создать пользователя только для чтения для просмотра хранилища и администратора для каждого администратора (который сказал: одно чтение -только пользователь для всех тех пользователей, которые не являются администраторами). Более того, я бы рекомендовал периодически создавать резервные образы (возможно, один раз в день?). Очень важно, если у вас большой репозиторий или вы время от времени устанавливаете свои собственные артефакты.

    И последнее, но не менее важное: при добавлении новых удаленных репозиториев вы должны добавить фильтры включения / исключения, чтобы поиск артефактов в репозитории проводился быстрее.

    Есть много других вопросов, которые необходимо рассмотреть, но это основные проблемы, с которыми я столкнулся при управлении внутренним хранилищем Maven.

    Для записи я использую Nexus и Artifactory; Я могу четко заявить, что, хотя Nexus очень прост и функционален (хотя у меня иногда возникают проблемы с процессом установки в Ubuntu), его бесплатная версия не может конкурировать с бесплатной редакцией сообщества Artifactory. Исключая удивительный веб-интерфейс Artifactory Web 2, его основные функции, такие как управление безопасностью, периодическое резервное копирование и проблемы доступности, намного превосходят возможности Nexus.

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top