Как Maven взаимодействует с разными репозиториями?

StackOverflow https://stackoverflow.com//questions/11651088

  •  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 загружают это тот же формат).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top