Como o Maven interage com diferentes repositórios?
-
11-12-2019 - |
Pergunta
Como o Maven interage com diferentes repositórios como Nexus e Artifactory?
Isso é feito usando suas APIs REST?É possível resolver artefatos dependentes para locais reais para obtê-los usando essas APIs, mas as duas APIs são um pouco diferentes uma da outra (até onde eu vejo [Artefábrica] [Nexo]) e o elemento de definição do repositório nos arquivos pom do Maven não contém uma propriedade para indicar o tipo do repositório.
Então, como o Maven resolve o groupId, o artefatoId e a versão do artefato para um arquivo real em diferentes repositórios?Esses repositórios implementam alguma outra API padronizada que permite ao Maven solicitar arquivos deles de maneira independente do repositório?
Solução
Você define repositórios para pesquisar artefatos de 2 maneiras:
1) no seu pom.xml na seção do projeto
<project>
....
<repositories>
<repository>
...
<url>...</url>
</repository>
</repositories>
</project>
2) e/ou em arquivo $USER_HOME$/.m2/settings.xml
(há muitos exemplos na WEB)
O Maven baixa artefatos construindo a URL do artefato usando a URL do repositório e anexando o caminho de acordo com o grupo de artefatos, ID, versão, tipo e classificador.E converte pontos em groupId em '/'
RepoUrl/groupId/artifactId/version/artifactId-version-classifier.type
Exemplos:
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
Isso é uma convenção e é independente do Artifactory ou do Nexus.Este é Maven.Tudo é transferido através de HTTP ou HTTPS.Além disso, o Maven lida com arquivos MD5 e SHA1 para fins de segurança.
Depois de baixado, o artefato armazenado no repositório local em sua estação de trabalho em $USER_HOME$/.m2/repositories
(possui estrutura semelhante a repositório remoto) que atua como cache e proxy.
Normalmente Artifactory ou Nexus são uma espécie de cache local e proxy no nível da empresa com algumas funcionalidades para gerenciá-lo.Certamente eles hospedam artefatos maven publicados por desenvolvedores da empresa.
Parece três níveis de repositórios:local - empresa local - global
Outras dicas
Maven usa algum tipo de convenção de nomenclatura.Em pom.xml
você define uma URL raiz do repositório (por exemplo http://download.java.net/maven/2/
) e então o maven é capaz de resolver um artefato construindo uma URL:
<root URL>/${group id where dots are replaced by slashes}/${artifact id}/${version}
Então, para a seguinte dependência
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-core</artifactId>
<version>2.0.0</version>
Maven tentará encontrar poms e jar em http://download.java.net/maven/2/org/apache/lucene/lucene-core/2.0.0
Isso significa que todo URI que segue esta convenção pode servir como repositório Maven.
Maven usa chamadas HTTP normais para interagir com repositórios.Você não precisa de nada além de um servidor HTTP para atender um repositório maven.O Maven depende de uma hierarquia específica de diretórios e alguns arquivos de metadados.(o repositório local no disco em que o Maven cache arquivos que ele baixou é o mesmo formato).