当您在多核/多 CPU 机器上使用 maven 构建时,通常可以并行构建不同的子项目。有没有办法用maven做到这一点?有这个/什么的插件吗?
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 上找到:Parallel builds in Maven 3 - Apache Maven - Apache Software Foundation。
建议的解决方案很棒,但我想在这里添加一些关于并行构建期间测试稳定性的答案。
因此,当使用 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
操作数据库条目,该键是硬编码的,test2
使用相同的条目!不可能是好的……
这是一种首先应该考虑的情况,但有时它会被遗忘,一旦切换到并行 maven 构建,可能会导致不同的问题。
如果发生这种情况,并且您至少在某些情况下仍希望使用并行执行,您可以(当然,除了尝试修复测试并使其正确隔离)使用 -DskipTests
参数到 disable Maven test runs:
mvn clean install -T 4 -DskipTests
一些 CI 构建应用程序(例如 hudson)可以同时构建多个 maven 项目(甚至在多台机器上)。
在 maven 'standalone' 中对此的支持也很好,快速浏览一下 maven 问题跟踪器给了我:http://jira.codehaus.org/browse/MNG-3004
如果您来这个问题是为了整理您的构建服务器,并且您没有使用本机处理 maven 的服务器,那么您正在寻找的魔法标志是这样的:
-Dmaven.repo.local=someNoneGlobalDir
对你的每一个构建都这样做,你可以让它们同时运行,而不是让所有使用 maven 的东西都排在队列中!