В моей компании мы используем Archiva , это на сегодняшний день самый простой менеджер хранилища для настройки и обслуживания. Особенно, если вы идете с автономной версией. Каждый разработчик просто устанавливает profile
в своем файле ~/.m2/settings.xml
, чтобы указать на внутренний репозиторий. Если это слишком много проблем, просто поместите внутренний репозиторий в <repositories/>
в pom.xml
напрямую, но это действительно плохая практика. Если когда-либо перемещается URL-адрес хранилища, вам необходимо обновить все файлы проектов pom.xml
. Где использование settings.xml
возлагает на разработчика бремя обновления локальной конфигурации.
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<profiles>
<profile>
<id>internal</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<repositories>
<repository>
<id>mycompany.internal</id>
<name>Internal Release Repository</name>
<url>http://maven.mycompany.com/repository/internal/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>mycompany.snapshots</id>
<name>Internal Snapshot Repository</name>
<url>http://maven.mycompany.com/repository/snapshots/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</profile>
</profiles>
<servers>
<server>
<id>internal</id>
<username>guest</username>
</server>
<server>
<id>snapshots</id>
<username>guest</username>
</server>
</servers>
</settings>
Если настройка менеджера репозитория является слишком большой проблемой, я думаю, вам нужно пересмотреть альтернативу ручного добавления материала в ваш локальный репозиторий вручную, что очень подвержено ошибкам и отнимает много времени. Я запускаю экземпляр Archiva для своей личной разработки только потому, что так просто добавить плагин release
и управлять версиями, не запоминая все таинственные опции -D
, необходимые для добавления материалов в локальный репозиторий на каждой машине. Копировать файл ~/.m2/settings.xml
очень просто, и если он работает на одном компьютере, он работает на всех из них.
Вот что вы добавляете к своему pom.xml
, чтобы разрешить автоматическое выполнение выпусков и отправку артефактов в хранилище, в моем случае это Archiva.
<distributionManagement>
<repository>
<id>internal</id>
<name>Internal Archiva Repository</name>
<url>http://maven.mycompany.com/repository/internal/</url>
<layout>default</layout>
<uniqueVersion>false</uniqueVersion>
</repository>
<snapshotRepository>
<id>snapshots</id>
<name>Internal Archiva Repository</name>
<url>http://maven.mycompany.com/repository/snapshots/</url>
<layout>default</layout>
<uniqueVersion>false</uniqueVersion>
</snapshotRepository>
</distributionManagement>
Затем все, что вам нужно сделать, это mvn clean release:prepare
, чтобы автоматически обновить pom.xml
версию , проверить , тег и опционально ответвление релиз и упаковать все артефакты, а затем mvn release:perform
, чтобы отправить артефакты в удаленный репозиторий и проверить недавно обновленную версию pom.xml
, и вы готовы к следующей версии, чтобы начать разработку.
Снимки попадают на snaphots
, а релизы автоматически переходят на internal
с плагином релиза. Вам также необходимо настроить плагин scm, но это всего лишь несколько строк конфигурации, к которым вам нужно только прикоснуться и еще раз.
Вот как это выглядит для git, мы используем Gitorious в качестве нашего менеджера репозитория git
<scm>
<connection>scm:git:git://gitorious.mycompany.com:myproject/myproject.git</connection>
<developerConnection>scm:git:ssh://git@gitorious.mycompany.com/myproject/myproject.git</developerConnection>
<url>http://gitorious.mycompany.com/myproject/myproject</url>
</scm>
Старый настольный компьютер, работающий под управлением Linux, может выполнять такие обязанности хранилища для команды разработчиков без необходимости закупок и ИТ.