Qual é a diferença entre “mvn deploy” para um repositório local e “mvn install”?

95

Minha equipe usa um repo maven de equipe interna que é compartilhado de um servidor de desenvolvimento usando Apache. Também executamos o servidor Continuum CI na mesma máquina. As compilações do Maven no Continuum são executadas com o objetivo "instalar", que copia o artefato final diretamente no diretório compartilhado.

A questão é: qual é a diferença entre adicionar arquivos ao repositório compartilhado usando mvn installe usar o objetivo de implantação (plugin mvn-deploy)?

Parece-me que usar mvn deploycria problemas de configuração adicionais, mas eu li em algum lugar que instalar arquivos em um repositório compartilhado é uma má ideia por algum motivo relacionado ao funcionamento interno do maven.

atualização: eu obtenho as diferenças funcionais entre deploye install; Na verdade, estou mais interessado nos detalhes de baixo nível em termos de quais arquivos são criados no repositório do maven.

Ken Liu
fonte

Respostas:

166

Ken, boa pergunta. Eu deveria ser mais explícito no Guia Definitivo sobre a diferença. "instalar" e "implantar" atendem a dois propósitos diferentes em uma construção. "instalar" refere-se ao processo de instalação de um artefato em seu repositório local. "implantar" refere-se ao processo de implantação de um artefato em um repositório remoto.

Exemplo:

  1. Quando executo um grande projeto de vários módulos em minha máquina, geralmente irei executar "mvn install". Isso irá instalar todos os artefatos de software binários gerados (geralmente JARs) em meu repositório local. Então, quando eu construir módulos individuais na construção, o Maven irá recuperar as dependências do repositório local.

  2. Quando chegar a hora de implantar instantâneos ou lançamentos, irei executar "mvn deploy". Executá-lo tentará implantar os arquivos em um repositório ou servidor remoto. Normalmente, estarei implantando em um gerenciador de repositório como o Nexus

É verdade que executar "deploy" exigirá alguma configuração extra, você terá que fornecer uma seção DistributionManagement em seu POM.

Tim O'Brien
fonte
@Tim, então qual é exatamente a vantagem mvn deploy? Quais são os benefícios para a configuração extra que foi exigida em primeiro lugar?
Geek
4
O Deploy foi projetado para implementar artefatos em um servidor remoto. É um caso de uso totalmente diferente da instalação.
Tim O'Brien de
17

Dos documentos do Maven , parece que é apenas uma diferença em qual repositório você instala o pacote:

  • instalar - instalar o pacote no repositório local, para usar como uma dependência em outros projetos localmente
  • implantar - feito em um ambiente de integração ou liberação, copia o pacote final para o repositório remoto para compartilhamento com outros desenvolvedores e projetos.

Talvez haja alguma confusão em que "instalar" no servidor CI o instala em seu repositório local, que você, como usuário, está compartilhando?

matt b
fonte
4

"matt b" está certo, mas para ser específico, o objetivo "instalar" copia seu destino construído para o repositório local em seu sistema de arquivos; útil para pequenas mudanças em projetos que atualmente não são destinados ao grupo completo.

O objetivo "implantar" o carrega em seu repositório compartilhado para quando seu trabalho for concluído e, em seguida, pode ser compartilhado por outras pessoas que precisam dele para seus projetos.

No seu caso, parece que "instalar" é usado para facilitar o gerenciamento da implantação, já que o repositório local do CI é o repositório compartilhado. Se o CI estivesse em outra caixa, ele teria que usar o objetivo "implantar".

Spencer Kormos
fonte