Maven:如何做并行构build?

在多核/多CPU机器上使用maven构build时,通常可以并行构build不同的子项目。 有没有办法做到这一点与maven? 有没有这个/什么的插件?

Maven 3(从testing版1开始)现在支持并行构build作为实验性function。

例如,

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 

完整的文档可以在Maven wiki上find。

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

一些CI构build应用程序(例如hudson)可以同时构build多个maven项目(甚至在多个机器上)。

在maven“standalone”中对此的支持也不错,通过maven issue tracker快速浏览给了我: http : //jira.codehaus.org/browse/MNG-3004

如果你来这个问题想找出你的构build服务器,而你没有使用一个处理Maven本身的魔法标志,你正在寻找的是这样的:

 -Dmaven.repo.local=someNoneGlobalDir 

为你的每一个构build做这件事,你可以让它们同时运行,而不是让所有在队列中使用maven的东西!

build议的解决scheme是伟大的,但我想补充一些东西在这里的答案在平行build设testing的稳定性。

所以,当使用Maven并行构build时:

 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 

可能会出现一些testing问题 。 请注意在串行和并行testing执行中不同的testing行为。 大多数情况下,发生的资源明智的testing隔离不正确的

例如,test1操作数据库键入12345,这是硬编码和test2使用相同的条目! 这不可能是好事

首先应该考虑这种情况,但是有一段时间它被遗忘了,一旦切换到并行Maven构build,可能会导致不同的问题。

如果发生这种情况,并且至less在某些情况下仍然希望使用并行执行,则可以(当然,除了尝试修复testing并使其正确隔离), 可以使用-DskipTests参数禁用Maventesting运行 :

 mvn clean install -T 4 -DskipTests