Я сделал следующее, чтобы определить порядок, в котором Maven считает порядок хранилища:
- Я обновил URL-адреса всех настроек хранилища / зеркала во всех файлах XML как недействительные Maven репозитории для принудительного сбоя Maven
- Я запустил
mvn compile
Следующие результаты предполагают, что определенная зависимость никогда не загружалась / не регистрировалась в локальном кэше ~/.m2/repository
( то есть он не был кэширован или не потерпел неудачу ранее, используя другое хранилище). Если у вас есть запись для определенной зависимости в локальном кэше, Maven будет повторно использовать эту кэшированную запись (которая также сохраняет исходный репозиторий исходного кода), чтобы попытаться извлечь ее снова.
Это то, что Maven пытается, когда НЕТ зеркал настроены:
Downloading from settings-repo1: http://settings-repo1.org/org/apache/httpcomponents/httpclient1/4.5.6/httpclient1-4.5.6.pom
Downloading from settings-repo2: http://settings-repo2.org/org/apache/httpcomponents/httpclient1/4.5.6/httpclient1-4.5.6.pom
Downloading from pom-child-repo1: http://child-repo1.org/org/apache/httpcomponents/httpclient1/4.5.6/httpclient1-4.5.6.pom
Downloading from pom-child-repo2: http://child-repo2.org/org/apache/httpcomponents/httpclient1/4.5.6/httpclient1-4.5.6.pom
Downloading from pom-parent-repo1: http://parent-repo1.org/org/apache/httpcomponents/httpclient1/4.5.6/httpclient1-4.5.6.pom
Downloading from pom-parent-repo2: http://parent-repo2.org/org/apache/httpcomponents/httpclient1/4.5.6/httpclient1-4.5.6.pom
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpclient1/4.5.6/httpclient1-4.5.6.pom
и когда настроены зеркала ARE:
Downloading from settings-repo1: http://settings-repo1.org/org/apache/httpcomponents/httpclient1/4.5.6/httpclient1-4.5.6.pom
Downloading from settings-repo2: http://settings2.org/org/apache/httpcomponents/httpclient1/4.5.6/httpclient1-4.5.6.pom
Downloading from settings-mirror1: http://settings-mirror1.org/org/apache/httpcomponents/httpclient1/4.5.6/httpclient1-4.5.6.pom
Downloading from settings-mirror2: http://settings-mirror2.org/org/apache/httpcomponents/httpclient1/4.5.6/httpclient1-4.5.6.pom
Downloading from pom-parent-repo1: http://parent-repo1.org/org/apache/httpcomponents/httpclient1/4.5.6/httpclient1-4.5.6.pom
Downloading from pom-parent-repo2: http://parent-repo2.org/org/apache/httpcomponents/httpclient1/4.5.6/httpclient1-4.5.6.pom
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpclient1/4.5.6/httpclient1-4.5.6.pom
Таким образом, порядок должен быть:
settings.xml
- текущего проекта
pom.xml
- родительского проекта
pom.xml
Если настроены какие-либо зеркала, они просто заменят соответствующие репозитории в исходном списке, обозначенном mirrorOf
элемент. Если выражение mirrorOf
идентифицирует несколько репозиториев, будет пробоваться только первое вхождение (в исходном порядке Maven без настроенных зеркал). Например, если есть зеркало (например, settings-mirror1
), настроенное для: <mirrorOf>pom-parent-repo2,pom-child-repo1</mirrorOf>
, порядок поиска в хранилище будет:
Downloading from settings-repo1: http://settings-repo1.org/org/apache/httpcomponents/httpclient1/4.5.6/httpclient1-4.5.6.pom
Downloading from settings-repo2: http://settings-repo2.org/org/apache/httpcomponents/httpclient1/4.5.6/httpclient1-4.5.6.pom
Downloading from settings-mirror1: http://settings-mirror1.org/org/apache/httpcomponents/httpclient1/4.5.6/httpclient1-4.5.6.pom
Downloading from pom-child-repo2: http://child-repo2.org/org/apache/httpcomponents/httpclient1/4.5.6/httpclient1-4.5.6.pom
Downloading from pom-parent-repo1: http://parent-repo1.org/org/apache/httpcomponents/httpclient1/4.5.6/httpclient1-4.5.6.pom
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpclient1/4.5.6/httpclient1-4.5.6.pom
Что касается хранилищ, объявленных в файлах POM зависимостей, я думаю одно не должно заботиться о них. Если у вас есть зависимость, она должна быть доступна в одном из объявленных репозиториев (настройки, родительский pom, pom), в противном случае сборка не удастся (даже если у вас есть эта зависимость, загруженная и кэшированная ранее другим проектом (зависимая или нет) ).