В настоящее время мы оцениваем возможность создания внутреннего репозитория Nexus компании для нашей разработки Java.
К сожалению, некоторые вопросы остались без ответа, но, возможно, вы сможете помочь.
Лучшей практикой кажется родительский pom для всех проектов внутри компании. Что не ясно, так это то, что должен содержать этот pom, кроме <organization>
section.
Лучше всего также указать <distributionManagement>
внутри этого pom? Если да, что он должен содержать и как он должен выглядеть, если мы хотим сослаться на связь компании (<site>
, <repository>
, <snapshotRepository>
)?
Как справиться с тем фактом, что (согласно sonatype) лучше всего, чтобы каждый проект имел свой собственный репозиторий без необходимости указывать корневой путь нексуса в каждом pom?
Должны ли мы также указать там разделы <repositories>
и <pluginRepositories>
(ссылаясь на нашу внутреннюю связь)?
Кроме того, мы хотим, чтобы в основном каждый проект мог развернуть свой собственный сайт, можем ли мы указать это также внутри родительского pom? И если да, то как должна выглядеть конфигурация плагина сайта?
Лучше всего было бы, если бы кто-то мог предоставить полный пример корпоративного pom, который можно использовать с внутренним репозиторием Nexus.
Или все-таки лучше положить все это внутрь settings.xml
, чтобы не привязывать проект к определенному репозиторию? Но насколько я знаю, <distributionManagement>
нельзя указать в settings.xml? Также это будет утомительная работа по обновлению, если URL-адрес нексуса когда-нибудь изменится?
Я действительно запутался во всем этом, хотя я пытался много читать об этом.
Заранее спасибо!
ОБНОВЛЕНИЕ/Решение
Благодаря ответу Michael-O ниже у меня есть необходимая информация.
- Теги
<repositories>
и<pluginRepositories>
относятся к тегуsettings.xml
. Здесь можно указать репозиторий Nexus для "Загрузки" (при необходимости укажите учетные данные, используя<servers>
<distributionManagement>
относится к корпоративной базе pom, ссылаясь на базовый репозиторий Nexus для выпусков и снимков. Здесь можно указать репозиторий Nexus для "загрузки" (развертывания).Если необходимы подрепозитории (для логической группировки проектов), они указываются внутри проектов
pom.xml
и, следовательно, переопределяют те, которые находятся внутри компании pom. Чтобы упростить это и сохранить базовый URL-адрес нексуса только внутри корпоративного pom (остерегайтесь изменений URL-адреса), может быть полезно/возможно указать репозитории внутри<distributionManagement>
следующим образом:<repository> <id>company-repository</id> <name>Internal Releases</name> <url>http://my.nexus.repo/releases/${subRepositoryId}-releases</url> </repository>
Пример корпоративного pom можно найти в этом сообщении.
- Чтобы предотвратить изменения конфигурации внутри файлов или настроек pom, можно использовать псевдоним для URL-адреса нексуса. Хотя это потребует дополнительных усилий со стороны администрации.
- Если для проекта необходим сайт, общее определение внутри корпоративного pom использовать нельзя, его нужно объявлять индивидуально для каждого pom проекта. Чтобы упростить этот процесс, URL-адрес нексуса сайта может храниться внутри свойства корпоративного pom, на который затем можно ссылаться в управлении распространением сайта pom проекта.
Корпоративный pom может содержать что-то подобное:
<project>
....
<properties>
<repository.group>common</repository.group>
<repository.url.base>http://my.nexus:port/nexus/content</repository.url.base>
<repository.url.repositories>${repository.url.base}/repositories</repository.url.repositories>
<repository.url.sites>${repository.url.base}/sites</repository.url.sites>
</properties>
<distributionManagement>
<repository>
<id>company-repository</id>
<name>Internal Releases</name>
<url>${repository.url.repositories}/${repository.group}-releases</url>
</repository>
<snapshotRepository>
<id>company-repository</id>
<name>Internal Snapshots</name>
<url>${repository.url.repositories}/${repository.group}-snapshots</url>
</snapshotRepository>
</distributionManagement>
....
</project>
Проект pom похож на этот:
<project>
...
<properties>
<repository.group>project-group</repository.group>
</properties>
<distributionManagement>
<site>
<id>company-repository</id>
<name>Internal Releases</name>
<url>dav:${repository.url.sites}/project-site</url>
</site>
</distributionManagement>
...
</project>
ВНИМАНИЕ: может возникнуть вопрос, почему бы не включить часть сайта напрямую в корпоративный файл pom. Это невозможно, так как вы не можете развернуть несколько сайтов в одном и том же репозитории сайта, не создавая беспорядка. Используя способ, описанный выше, не нужно создавать репозиторий для каждого проекта, но можно логически сгруппировать их в более крупные группы или оставить их в группе/репозитории common-releases/snapshots.
settings.xml
тогда? - person JDC   schedule 04.11.2015