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?

Foi útil?

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).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top