Вот как это работает в двух словах, при условии, что ваш удаленный репозиторий (Nexus, или Artifactory, или тому подобное) и settings.xml
настроены правильно.
Допустим, у вас есть проект с одной зависимостью от commons-logging
. Когда Maven разрешает зависимости вашего проекта как часть сборки, он выполняет следующие шаги:
- Проверяет локальное репо на
commons-logging
.
- Если найдено, сделано. Продолжить сборку.
- Если не найден: проверяет наличие
commons-logging
в удаленном репо.
- Если найдено, загрузите артефакт в локальный репозиторий. Готово; продолжить сборку.
- Если не найдено в удаленном репо: удаленное репо связывается с центральным офисом для загрузки
commons-logging
. Затем Maven можно загрузить в локальный репозиторий. Готово; продолжить сборку.
В конце этих шагов, commons-logging
должно быть как в вашем локальном, так и в удаленном репозитории, больше ничего не нужно делать. Если это не так, то либо ваш settings.xml
не настроен для подключения к удаленному репо при поиске зависимостей (он напрямую связывается с центральным сервером?), Либо Nexus настроен неправильно.
---- Редактировать ----
Вот фрагмент моего файла settings.xml, который работает. @Raghuram дал вам хороший совет, когда он предложил вам включить оба профиля; если бы вы каким-то образом включили только профиль public-snapshots
, ваши сборки продолжали бы попадать непосредственно в maven central.
....
<mirrors>
<!-- redirects all traffic to internal Nexus repo instead of Maven central -->
<mirror>
<id>maven2</id>
<mirrorOf>*</mirrorOf>
<url>http://repository.someCompany.com/maven2RepoOrGroupInNexus</url>
</mirror>
</mirrors>
....
<profiles>
<profile>
<id>repo-profile</id>
<repositories>
<repository>
<id>central</id>
<url>http://gotoNexus</url> <!-- URL is unimportant here -->
<snapshots>
<enabled>true</enabled>
<updatePolicy>daily</updatePolicy>
</snapshots>
<releases>
<enabled>true</enabled>
<updatePolicy>daily</updatePolicy>
</releases>
</repository>
</repositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>repo-profile</activeProfile> <!-- important -->
</activeProfiles>
Обратите внимание на элемент activeProfiles
внизу; это означает, что вы будете использовать Nexus вместо Maven central с каждой командой mvn
.
Вам все еще нужно убедиться, что Nexus настроен так, чтобы URL, определенный в <mirror>
, содержал контент из Maven central, но как настроить Nexus, было бы отдельным вопросом.
Ссылка: Документация Nexus для конфигурации Maven