Как Maven взаимодействует с разными репозиториями?
-
11-12-2019 - |
Вопрос
Как Maven взаимодействует с различными репозиториями, такими как Nexus и Artifactory?
Это делается с использованием их REST API?Можно разрешить зависимые артефакты в реальных местоположениях, чтобы получить их от использования этих API, но эти два API несколько отличаются друг от друга (насколько я вижу [Художественная фабрика] [Нексус]), а элемент определения репозитория в файлах pom Maven не содержит свойства, указывающего тип репозитория.
Так как же Maven преобразует идентификатор группы, артефакта и версию артефакта в реальный файл в разных репозиториях?Реализуют ли эти репозитории какой-либо другой стандартизированный API, который позволяет Maven запрашивать у них файлы независимо от репозитория?
Решение
Определите репозитории для поиска артефактов двумя способами:
1) в вашем pom.xml в разделе проекта
<project>
....
<repositories>
<repository>
...
<url>...</url>
</repository>
</repositories>
</project>
2) и/или в файле $USER_HOME$/.m2/settings.xml
(есть много примеров в Интернете)
Maven загружает артефакты, создавая URL-адрес артефакта, используя URL-адрес репозитория и добавляя путь в соответствии с группой артефакта, идентификатором, версией, типом и классификатором.И преобразует точки в идентификаторе группы в '/'
RepoUrl/groupId/artifactId/version/artifactId-version-classifier.type
Примеры:
https://repository.apache.org/content/repositories/releases/commons-io/commons-io/2.4/commons-io-2.4.jar
https://repository.apache.org/content/repositories/releases/commons-io/commons-io/2.4/commons-io-2.4-sources.jar
https://repository.apache.org/content/repositories/releases/commons-io/commons-io/2.4/commons-io-2.4-javadoc.jar
Это соглашение, и оно не зависит от Artifactory или Nexus.Это Мейвен.Все передается через HTTP или HTTPS.Кроме того, Maven обрабатывает файлы MD5 и SHA1 в целях безопасности.
После загрузки артефакт сохраняется в локальном репозитории на вашей рабочей станции по адресу $USER_HOME$/.m2/repositories
(он имеет структуру, аналогичную удаленному репозиторию), который действует как кеш и прокси.
Обычно Artifactory или Nexus представляют собой своего рода локальный кеш и прокси на уровне компании с некоторыми функциями для управления им.Наверняка там размещаются артефакты maven, опубликованные разработчиками компании.
Похоже на 3 уровня репозиториев:местный – местная компания – глобальный
Другие советы
Maven использует какое-то соглашение об именах.В pom.xml
вы определяете корневой URL-адрес репозитория (например. http://download.java.net/maven/2/
), а затем maven сможет разрешить артефакт, создав URL-адрес:
<root URL>/${group id where dots are replaced by slashes}/${artifact id}/${version}
Итак, для следующей зависимости
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-core</artifactId>
<version>2.0.0</version>
Maven попытается найти помпы и jar в http://download.java.net/maven/2/org/apache/lucene/lucene-core/2.0.0
Это означает, что каждый URI, соответствующий этому соглашению, может служить репозиторием Maven.
Maven использует нормальные HTTP-вызовы, чтобы взаимодействовать с репозиториями.Вам не нужно ничего, кроме сервера HTTP для обслуживания репозитория Maven.Maven опирается на определенную иерархию каталогов и несколько файлов метаданных.(Локальный на дисковом репозитории, где файлы Caches Maven загружают это тот же формат).