美芬: 如何进行并行构建?

在多核/多 CPU 机器上使用 maven 构建时,通常可以并行构建不同的子项目。有办法和 Maven 解决吗?有没有什么插件?

109590 次浏览

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

在 maven 的“独立”中支持这一点也不错,快速浏览一下 maven 的问题跟踪程序给了我: http://jira.codehaus.org/browse/MNG-3004

Maven3(从 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

完整的文档可以在 Mavenwiki: Maven 3中的并行构建-Apache Maven-Apache软件基金会上找到。

如果你来到这个问题,希望整理你的构建服务器,你没有使用一个本地处理 Maven 的魔术标志,你正在寻找的是这样的:

-Dmaven.repo.local=someNoneGlobalDir

对每个构建都这样做,您可以让它们同时运行,而不是让队列中使用 maven 的所有内容都运行!

建议的解决方案是伟大的,但我想添加到这里的答案关于 在并行构建过程中测试稳定性

因此,当使用 Maven 平行建造时:

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操作 db 条目,12345是硬编码的,而 test2使用相同的条目!肯定不是好事。

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

如果发生这种情况,并且您仍然希望至少在某些情况下使用并行执行,那么您可以使用 -DskipTests参数(当然,除了尝试修复测试并将它们正确地隔离之外)对 禁用 Maven 测试运行执行:

mvn clean install -T 4 -DskipTests