Pergunta

Eu gostaria de ter Nexus (ou Artifactory, não estamos ainda decidido) armazenar uma cópia de um artefato quando ele é baixado de um repositório público na internet (como Maven Central).

Basicamente, se você não tem o frasco em seu repositório local e o gerente repo não tem isso também, quero pedir ao gerente repo para o frasco, tê-lo enviá-lo para mim, e armazená-lo tanto no gerenciador de repo e no meu repo local. Então, quando outra pessoa pede o gerente repo para o mesmo frasco, ele envia a eles a partir do gestor repo e salve-o em seu repo local, sem a necessidade de bater Maven central.

Isso soa como como deve funcionar fora da caixa, mas eu não vejo isso. Eu posso ver os artefatos em Maven centrais através do gerenciador de repo, mas quando eu uso Netbeans para adicionar uma dependência para o meu projeto, ele baixa-lo diretamente da Maven central (aparentemente). Nada é armazenado em cache no gerenciador de repo (tanto quanto eu posso ver).

Foi útil?

Solução

Nexus tem o conceito de repositório de procuração que faz quase exatamente o que você descreve. Consulte a seção do livro o Proxying repositórios públicos para detalhes.

Artifactory tem uma característica semelhante chamado repositórios virtuais .

proxy e cache de um repositório público remoto pode acelerar o seu constrói através da redução de downloads redundantes através da internet pública. Se um desenvolvedor em suas necessidades de organização para baixar a versão 2.5 do Spring Framework e você estiver usando Nexus, as dependências (e dependências da dependência) só precisa ser baixado a partir do repositório remoto uma vez. Com uma conexão de alta velocidade à Internet, isso pode parecer uma preocupação menor, mas se você está constantemente pedindo a seus desenvolvedores para baixar centenas de megabytes de dependências de terceiros, as economias de custo real são vai ser o tempo que leva Maven para verificar se há novas versões de dependências e para baixar as dependências através da internet pública.

Você pode parar seu Maven instalar a partir sempre tentando se conectar a Central através da criação de seu gerente de repositório como um espelho da central, os pedidos para o centro de então será direcionado ao seu gerente de repositório. Por exemplo, adicione o seguinte para a seção <mirrors> de settings.xml do Maven para Redirecionar solicitações para central para seu gerente de repositório:

<mirror>
  <id>central-proxy</id>
  <mirrorOf>central</mirrorOf>
  <url>http://myrepo/nexus/content/groups/public</url>
</mirror>

I tendem a configurar um grupo repositório contendo vários repositórios remotos. O grupo atua como um único repositório tanto quanto instalar a minha Maven está em causa, mas reúne artefatos de vários repositórios remotos.

Outras dicas

proxy e cache artefatos de outros repositórios públicos é (ou deveria ser) de fato embutido em qualquer gestor repositório corporativo decente. Em um ambiente corporativo, as equipes de desenvolvimento deve ser capaz de desenvolver e construir o seu software, mesmo quando um repositório público é baixo. Este é um caso de uso muito básico e uma das razões para usar um repositório corporativo (não sendo dependente dos recursos públicos que você não controla).

Uma vez que o gerente de repositório é instalado e configurado, você precisa configurar o Maven para verificar o repositório em vez dos repositórios públicos. Para fazer isso, editar suas configurações de espelho (como fora apontado por Rich) em sua ~/.m2/settings.xml. Consulte a seção 3.2. Configurando o Maven para usar um grupo único Nexus do Livro Nexus para mais detalhes (a configuração se aplica a qualquer gerente de repositório).

Em um ambiente corporativo, prefiro forçar Maven para uso um único repositório por tê-lo espelham todas solicitações repositório. Para conseguir isso, mirrorOf conjunto para *.

<settings>
  ...
  <mirrors>
    <mirror>
      <id>nexus</id>
      <mirrorOf>*</mirrorOf>
      <name>Maven Repository Manager running on repo.mycompany.com</name>
      <url>http://repo.mycompany.com/proxy</url>
    </mirror>
  </mirrors>
  ...
</settings>

Em Artifactory, você pode usar a página "Início-> Configurações Maven" para baixar uma configuração Maven que irá impor Maven para usar apenas repositórios virtuais Artifactory que você escolher. Isto combinado com a limpeza de referência repositório em repositórios virtuais fará com que você nunca vai consulta maven central.

Seu problema com NetBeans pode ser resolvido através da aplicação da declaração repo em sua instalação do Maven. A última vez que eu usei o suporte NetBeans Maven, eu também especificado um arquivo de nível de projeto settings.xml para cobrir todos os casos.

Nota lateral:. Usando o recurso mirrorOf é muito rude e pode levar a um comportamento estranho

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