Maven: como fazer construções paralelas?

152

Quando você constrói com o maven em uma máquina com vários núcleos / várias CPUs, geralmente é possível criar subprojetos diferentes em paralelo. Existe uma maneira de fazer isso com o maven? Existe um plugin para isso?

Hans-Peter Störr
fonte

Respostas:

228

O Maven 3 (a partir do beta 1) agora suporta compilações paralelas como um recurso experimental.

Por exemplo,

mvn -T 4 clean install # Builds with 4 threads
mvn -T 1C clean install # 1 thread per cpu core
mvn -T 1.5C clean install # 1.5 thread per cpu core

A documentação completa pode ser encontrada no wiki do Maven.

https://cwiki.apache.org/confluence/display/MAVEN/Parallel+builds+in+Maven+3

hallidave
fonte
5
O que significa 1.5 threads? Se eu tiver um sistema de núcleo único, isso significa 1 segmento, mas um sistema de núcleo duplo resulta em 3 segmentos?
Saad Malik
4
@SaadMalik Sim, exatamente, 3 tópicos sobre dual core, 6 tópicos em sistemas quad core, etc.
t0r0X
Existe um argumento que podemos usar para a JVM, para que possamos usá-lo no eclipse?
21715 Jason Huntley
O suporte ao Eclipse não chama o maven externamente.
Thorbjørn Ravn Andersen
18

As soluções sugeridas são ótimas, mas eu gostaria de acrescentar algo às respostas aqui sobre a estabilidade do teste durante compilações paralelas .

Portanto, quando a compilação paralela do Maven é usada:

mvn -T 4 clean install # Builds with 4 threads
mvn -T 1C clean install # 1 thread per cpu core
mvn -T 1.5C clean install # 1.5 thread per cpu core

Alguns problemas com os testes podem aparecer. Observe qualquer comportamento nos testes que seja diferente entre a execução serial e paralela. Na maioria das vezes, isso acontece para testar o isolamento inadequado em termos de recursos .

Por exemplo, test1 manipula a entrada db com a chave 12345, que é codificada permanentemente e test2 usa a mesma entrada! Não pode ser bom ...

É uma situação que deve ser considerada em primeiro lugar, mas às vezes é esquecida e pode levar a problemas diferentes assim que a mudança para a construção de maven paralela for feita.

Caso isso aconteça, e você ainda queira usar a execução paralela pelo menos em algumas ocasiões, é possível (é claro, além de tentar corrigir o teste e torná-los adequadamente isolados) desativar o Maven usando o argumento -DskipTests:

mvn clean install -T 4 -DskipTests
Johnny
fonte
12

Alguns aplicativos de criação de IC (por exemplo, hudson) podem criar vários projetos de maven ao mesmo tempo (e até em várias máquinas).

O suporte para isso no maven 'autônomo' também seria bom, uma rápida olhada no rastreador de problemas do maven me deu: http://jira.codehaus.org/browse/MNG-3004

jor
fonte
Eu acho que a funcionalidade Hudson para vários projetos maven ao mesmo tempo está quebrada, como é indicado nos comentários do MNG-3004 JIRA.
Dougnukem
2

Se você chegou a esta pergunta procurando resolver o seu servidor de compilação e não está usando um que lide com o maven nativamente, a bandeira mágica que você procura é a seguinte:

-Dmaven.repo.local=someNoneGlobalDir

faça isso para cada uma de suas compilações e você poderá deixá-las rodar ao mesmo tempo, em vez de ter tudo o que usa o maven em uma fila!

JonnyRaa
fonte