Maven:如何进行并行构建?

时间:2009-02-24 11:45:04

标签: maven-2 build-process build-automation

在多核/多CPU机器上使用maven构建时,通常可以并行构建不同的子项目。有没有办法用maven做到这一点?是否有插件/其他?

4 个答案:

答案 0 :(得分:195)

Maven 3(从beta 1开始)现在支持并行构建作为实验性功能。

例如,

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上找到完整的文档。

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

答案 1 :(得分:12)

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

maven'standalone'对此的支持也不错,快速查看maven问题跟踪器给了我:http://jira.codehaus.org/browse/MNG-3004

答案 2 :(得分:7)

建议的解决方案很棒,但我想在这里添加一些关于并行构建期间的测试稳定性的答案。

因此,当使用Maven parallel 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

可能会出现一些测试问题。注意测试中的任何行为,在串行和并行测试执行之间是不同的。大多数情况下,在资源方面不合适的测试隔离

例如,test1使用密钥12345操作数据库条目,密钥12345是硬编码的,test2使用相同的条目!它不会很好......

首先应该考虑这种情况,但有时它会被遗忘,并且一旦切换到并行maven构建就会导致不同的问题。

如果发生这种情况,并且您仍希望至少在某些情况下使用并行执行,您可以(当然,除了尝试修复测试并使其正确隔离之外)到disable Maven test runs使用-DskipTests参数:

mvn clean install -T 4 -DskipTests

答案 3 :(得分:2)

如果你想要解决你的构建服务器并且你没有使用一个本地处理maven的问题,那么你正在寻找的魔术旗是这样的:

-Dmaven.repo.local=someNoneGlobalDir

为每个构建执行此操作,您可以让它们同时运行所有内容,而不是让所有使用maven的队列都在队列中!