【问题标题】:Maven: how to do parallel builds?Maven:如何进行并行构建?
【发布时间】:2010-10-09 13:11:19
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    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。

    【讨论】:

    • 1.5 线程是什么意思?如果我有一个单核系统,是否意味着 1 个线程,但双核系统导致 3 个线程?
    • @SaadMalik 是的,确切地说,双核 3 个线程,四核系统 6 个线程,等等。
    • 有没有可以用于 JVM 的参数,所以我们可以在 eclipse 中使用它?
    • 每个 CPU 使用超过 1 个线程有什么意义?
    • @Enbugger 某些测试可能会导致线程在测试期间部分空闲,例如在等待端点或数据库响应时。
    【解决方案2】:

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

    所以,当使用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 构建,可能会导致不同的问题。

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

    mvn clean install -T 4 -DskipTests
    

    【讨论】:

    • 这不是问题的重点,也不是好的建议。在并行执行中中断的测试是不好的测试,它们也可能表明代码设计不好。最好倾听并采取行动。跳过测试来解决这个问题只是在掩盖一些事情。
    • 有什么关系?当有人在他的测试中引入并行执行时,可能会发生。这只是实用主义。
    • 在运行并行构建时,它们的测试阶段也是并行的,因此请确保禁用调试,因为调试端口的分配会默默地中断并行构建。
    【解决方案3】:

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

    在 maven 'standalone' 中对此的支持也很好,快速浏览一下 maven 问题跟踪器给了我:http://jira.codehaus.org/browse/MNG-3004

    【讨论】:

    • 我认为同时用于多个 maven 项目的 Hudson 功能已损坏,如 MNG-3004 JIRA cmets 所示。
    【解决方案4】:

    如果您来这个问题是为了整理您的构建服务器并且您没有使用原生处理 maven 的服务器,那么您正在寻找的魔法标志是这样的:

    -Dmaven.repo.local=someNoneGlobalDir
    

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

    【讨论】:

      猜你喜欢
      • 2016-02-20
      • 2020-05-19
      • 2023-03-12
      • 1970-01-01
      • 2014-06-24
      • 1970-01-01
      • 2013-01-26
      • 2010-09-30
      • 2016-08-01
      相关资源
      最近更新 更多