Atualize o repositório Nexus com artefatos locais
-
27-09-2019 - |
Pergunta
Recentemente, baixei alguns artefatos do Maven diretamente para o meu repositório local (.m2/repositório). Agora instalei o Nexus Repository Manager e preciso preencher seu armazenamento sem baixar todos os artefatos novamente. Existe uma maneira de atualizar o repositório Nexus com o local. Não quero simplesmente copiá -los porque os artefatos separados do Nexus relativos a seus servidores públicos (Central, Codehaus etc.) e a estrutura do repositório local não.
ATUALIZAÇÃO: Enquanto isso, copiei os artefatos do repositório local para o armazenamento do Nexus (repositório público). Eu posso navegar para os artefatos através do Nexus WebApp, mas o Maven de alguma forma não pode resolver os artefatos do Nexus. Eu preciso registrá -los particularmente? Recorrei o repositório público e reiniciei o Nexus várias vezes - sem alterações.
Solução
Nexus tem vários tipos de repositórios: repositórios hospedados (aqueles que realmente armazenam artefatos maven), Repositórios de proxy (que redireciona o tráfego para outros repositórios remotos quando um artefato é solicitado), Repositórios virtuais (um mero adaptador dos repositórios do MAVEN1 [fora do escopo desta pergunta]). você também pode criar Grupos de repositório que podem servir artefatos de qualquer um de seus agregados (o public
repositório é um desses).
Além disso, o Nexus divide seus repositórios de acordo com sua política de publicação em Instantâneos e lançamentos. As antigas lojas apenas são artefatos instantâneos; Enquanto o último, em teoria, pode armazenar instantâneos e lançamentos, mas realmente se comporta de buggy quando o repositório é muito grande e contém instantâneos.
Para hospedar seus artefatos, você precisa:
Primeiro: Divida o repositório local em dois: um contendo os instantâneos e outro contendo os lançamentos. A ferramenta de conversão do repositório Nexus o ajudará se o seu repositório for muito grande:
<dependency>
<groupId>org.sonatype.nexus.tools</groupId>
<artifactId>nexus-repository-conversion-tool</artifactId>
<version>1.8.0.1</version>
<classifier>cli</classifier>
</dependency>
Uma vez doente, você pode simplesmente executar java -jar nexus-repository-conversion-tool-1.8.0.1-cli.jar -rSource -oTarget
Onde Source
é o diretório que contém o repositório local para se mudar para o Nexus e Target
é um diretório existente, vazio e gravável, onde a ferramenta de conversão deixará os repositórios divididos. Desde que o diretório de origem seja repository
e alvo é temp
, vai criar temp/repository-snapshots
e temp/repository-releases
diretórios.
Segundo: Mova seus repositórios divididos para o Nexus. E deixe -os em ${NEXUS_HOME}/sonatype-work/nexus/storage
, ou onde quer que a instalação do Nexus seja configurada para armazenar os repositórios.
Terceiro: criar dois repositórios hospedados Com o mesmo ID que os repositórios, você mudou na segunda etapa. (no exemplo repository-snapshots
e repository-releases
)
Se o seu repositório contivesse apenas lançamentos, sua solução poderia ter funcionado, mas você terá cometido outro erro. Embora o Nexus armazena artefatos para cada repositório, o armazenamento daqueles que não são repositórios hospedados é apenas para fins de cache (como no caso do public
repositório), você teria que copiar seu conteúdo para um hospedado para trabalhar.