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