Qual a diferença entre “mvn clean package” e “mvn clean install”?


277

Quais são exatamente as diferenças entre mvn clean packagee mvn clean install? Quando eu executo esses dois comandos, eles parecem fazer a mesma coisa.



3
Um pacote (constrói-o no destino) e nas instalações (pacotes e coloca-o no seu repositório). Você precisa fazer o posterior se quiser usar esta versão em outro módulo.
Peter Lawrey

3
Talvez isso deva ser reaberto? É perfeitamente possível responder e não achei difícil responder. Além disso, se alguém é novato em folha, é fácil ver como as duas fases parecem fazer a mesma coisa. Vou editá-lo na tentativa de torná-lo menos vago.
Daniel Kaplan

Respostas:


371

Bem, ambos vão limpar. Isso significa que eles removerão a pasta de destino. A verdadeira questão é qual é a diferença entre pacote e instalação?

packageirá compilar seu código e também empacotá-lo. Por exemplo, se o seu pom disser que o projeto é um jar, ele o criará quando você o empacotar e o colocar em algum lugar no diretório de destino (por padrão).

installirá compilar e empacotar, mas também colocará o pacote no seu repositório local. Isso fará com que outros projetos possam se referir a ele e capturá-lo no seu repositório local.

Documentação


Por que o mvn install é mais rápido que o pacote mvn?
lostintranslation

9
@SharadHolani porque as compilações são incrementais. mvn clean installnão é mais rápido que mvn package.
OrangeDog

Para o meu projeto, o mvn package assembly: single, que constrói o jar de gordura, leva mais tempo que uma instalação do mvn. Empacote e instale os dois frascos de gordura equivalentes?
lostintranslation

1
@RakeshYadav sim, sim
Daniel Kaplan

116

O que limpa (comum nos dois comandos) - remove todos os arquivos gerados pela compilação anterior


Chegando à diferença entre o pacote de comandos e a instalação , primeiro você precisa entender o ciclo de vida de um projeto maven


Essas são as fases padrão do ciclo de vida no maven

  • validar - validar se o projeto está correto e todas as informações necessárias estão disponíveis
  • compilar - compila o código fonte do projeto
  • teste - teste o código fonte compilado usando uma estrutura de teste de unidade adequada. Esses testes não devem exigir que o código seja empacotado ou implantado
  • pacote - pegue o código compilado e empacote-o em seu formato distribuível, como um JAR.
  • verificar - execute qualquer verificação dos resultados dos testes de integração para garantir que os critérios de qualidade sejam atendidos
  • install - instala o pacote no repositório local, para uso como dependência em outros projetos localmente
  • deploy - feito no ambiente de construção, copia o pacote final para o repositório remoto para compartilhar com outros desenvolvedores e projetos.

Como o Maven funciona é, se você executar um comando para qualquer uma das fases do ciclo de vida, ele executará cada fase padrão do ciclo de vida em ordem, antes de executar o próprio comando.

ordem de execução

validar >> compilar >> testar (opcional) >> pacote >> verificar >> instalar >> implantar

Portanto, quando você executa o comando mvn package , ele executa os comandos para todas as fases do ciclo de vida até o pacote

validar >> compilar >> testar (opcional) >> pacote

E quanto ao mvn install , ele executa os comandos para todas as fases do ciclo de vida até a instalação, o que inclui também o pacote

validar >> compilar >> testar (opcional) >> pacote >> verificar >> instalar


Portanto, efetivamente, o que isso significa é que os comandos install fazem tudo o que o comando package faz e um pouco mais (instale o pacote no repositório local, para uso como dependência em outros projetos localmente)

Fonte: Referência do ciclo de vida do Maven


1
Isso deve ser marcado como resposta aceita. Isso define claramente e ajuda o OP a entender quais são as diferentes fases do ciclo de vida do maven e por que o mvn install inclui o pacote mvn, mas não o contrário.
Jasmeet Singh 30/09/19

1
Maven em poucas palavras, ótimo!
CodeSlave

19

O pacote irá gerar Jar / war conforme o arquivo POM. install instalará o arquivo jar gerado no repositório local para outras dependências, se houver.

a fase de instalação vem após a fase do pacote


primeira embalagem acontecerá, então esses pacotes (jar / war) serão instalados.
Abdul Gafoor

1
"Fase de instalação segue a fase do pacote". A maneira como é redigida atualmente é ao contrário. "Seguido por" significa "depois".
Charles Wood

11

Empacotar e instalar são várias fases no ciclo de vida da compilação maven. A fase do pacote executará todas as fases anteriores a isso e parará de empacotar o projeto como um frasco. Da mesma forma, a fase de instalação executará todas as fases anteriores e finalmente instalará o projeto localmente para outros projetos dependentes.

Para entender o ciclo de vida da construção do maven, acesse o seguinte link https://ayolajayamaha.blogspot.in/2014/05/difference-between-mvn-clean-install.html


1
O que você quer dizer com "e finalmente instalar o projeto localmente para outros projetos dependentes"
Arun Gowda

2
@ArunGowda significa que no .m2 criado em seu sistema após a instalação do maven será adicionado aos projetos que você está empacotando e estará disponível para outros projetos como dependência.
JAVA

uma imagem é de 1000 palavras, alguém tem um diagrama?

A instalação do @MrCholo mvn colocará o jar / war no seu repo de maven. O lugar onde todas as suas dependências Maven ficam armazenados, normalmente ~ / .m2
brt

6

packageadicionará o pacote jarou wara sua targetpasta. Podemos verificar quando, esvaziamos a pasta de destino (usando mvn clean) e depois executamos mvn package.
installfará tudo o que packagefizer, além de adicionar o pacote jarou waro repositório local. Para confirmar, verifique sua .m2pasta.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.