Instalação do Mvn ou pacote Mvn

134

Eu sou novo no Maven, tenho um projeto web baseado em Java com o maven configurado no meu MyEclipse.
Agora, se eu modifiquei algum arquivo java, preciso fazer Run as -> Mvn installou Mvn package?

user2192023
fonte

Respostas:

158

de http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html

package: pegue o código compilado e empacote-o em seu formato distribuível, como um JAR.

install: instale o pacote no repositório local, para uso como dependência em outros projetos localmente

Portanto, a resposta para sua pergunta é: depende se você deseja instalá-lo no seu repositório local. A instalação também executará o pacote, pois está mais alto na pilha da fase do objetivo.

ezcodr
fonte
Eu tenho um projeto em que estou convertendo o código da pasta principal e o código da pasta de teste em Jar. Quero implantar isso no nexus para que possa ser usado por outros projetos. Meu comando deploy é "mvn clean deploy -DskipTests". Posso criar esse pacote de comandos, em vez de instalar no repositório local?
precisa saber é o seguinte
@ MasterJoe2 "Então, eu quero implantar isso no nexus" É o que deployfaz. Se você substituí-lo package, ele não será implantado no Nexus.
27519 walen
37

mvn installé a opção mais usada.
mvn packageraramente é usado, apenas se você estiver depurando algum problema com o processo de criação do maven.

Veja: http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

Observe que mvn packageapenas criará um arquivo jar.
mvn installfará isso e instalará os arquivos jar (e classe etc.) nos locais apropriados se outro código depender desses jars.

Eu costumo fazer um mvn clean install; isso exclui o targetdiretório e recria todos os frascos nesse local.
A limpeza ajuda com coisas desnecessárias ou removidas que às vezes podem atrapalhar.
Em vez disso, depure (algumas vezes) apenas comece do zero o tempo todo.

Johan
fonte
27
Eu discordo que o pacote raramente é usado em 2 pontos. 1) É executado toda vez que você executa a instalação. 2) Se você está criando um arquivo .war, apenas executar o pacote é bom, pois você não precisa de uma guerra no seu repositório local.
21714 Joshua Wilson
5
A resposta não explica, por que você prefere instalar no repositório local. No meu entendimento, se os projetos forem configurados corretamente, o reator fornecerá as dependências entre os módulos. Se os projetos não estiverem configurados corretamente, a instalação poderá ocultar esse fato e usar os artefatos errados. Se você possui projetos dependentes, que devem ser construídos separadamente por algum motivo, somente então você deseja instalar.
Vsevolod Golovanov
11

A partir da referência do Ciclo de vida , a instalação executará os testes de integração do projeto, o pacote não.

Se você realmente não precisar instalar os artefatos gerados, use pelo menos verificar .

dna
fonte
5

Além disso, você deve observar que, se o seu projeto é composto por vários módulos que dependem um do outro, você deve usar "install" em vez de "package"; caso contrário, sua compilação falhará; quando você usar o comando install, o módulo A será empacotado e implantado no repositório local e, se o módulo B precisar do módulo A como uma dependência, ele poderá acessá-lo no repositório local.

Mr.Q
fonte
4

Se você não estiver usando um repositório remoto (como um artefato), use simples e antigo: mvn clean install

Tópico bastante antigo, mas o AFAIK, se você executar seu próprio repositório (por exemplo: com artefato) para compartilhar jar entre seus times, convém usar

mvn clean deploy

em vez de.

Dessa forma, seu servidor de integração contínua pode ter certeza de que todas as dependências foram enviadas corretamente ao seu repositório remoto. Se você perdeu um, o mvn não poderá encontrá-lo no seu repositório m2 local do CI.

user1853859
fonte
1
Eu acho que você está falando sobre o mvn clean deploy, não o mvn clean package
Mayjak
2

pacote - pega o código compilado e empacota-o em seu formato distribuível, como um arquivo JAR ou WAR. install - instala o pacote no repositório local, para uso como dependência em outros projetos localmente

Elilmatha Sivanesan
fonte
2

A maneira correta é que, mvn packagese você fez as coisas corretamente para a parte principal do seu build, não será necessário instalar seus pacotes no repositório local.

Além disso, se você usar o Travis, poderá "armazenar em cache" suas dependências, porque ele não tocará no seu $HOME.m2/repositoryse você usar o pacote para seu próprio projeto.

Na praticidade, se você tentar fazer um, mvn sitegeralmente precisará fazer um mvn installantes. Existem muitos erros com um siteou vários plugins mal mantidos.

Archimedes Trajano
fonte
0

Depende do que você está tentando alcançar após alterar o arquivo Java. Até que você queira testar o processo do maven, nunca precisará fazer nada. O Eclipse / MyEclipse criará o necessário e colocará a saída no local apropriado dentro do seu projeto. Você também pode executá-lo ou implantá-lo (se for um projeto da web, por exemplo), sem precisar fazer nada explicitamente com o maven. No final, para instalar seu projeto no repositório maven, você precisará fazer uma instalação maven. Você também pode ter outros objetivos que deseja executar, o que o MyEclipse não fará automaticamente.

Como eu disse, isso depende do que você quer fazer.

Tony Weddle
fonte