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?
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?
Respostas:
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
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
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
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!