【问题标题】:The maven build takes too longmaven 构建耗时太长
【发布时间】:2014-01-13 12:07:54
【问题描述】:

我们的应用程序(30 个 Maven 模块)的全局构建花费了太多时间(15 分钟)。这包括单元和集成测试。大部分时间用于集成测试 (60%)。

我们的技术栈由 Spring、Spring MVC、Spring Batch 等和 Maven 组成。我们的开发人员没有动力保持这种做法(在提交之前构建全部)

由于我想缩短构建时间,我建议以下方案:

  • 并行构建:mvn -T 1C 不会工作,因为这会消耗 开发人员机器的所有资源,这会阻止开发人员 做其他事情。
  • 按配置文件组织模块 (front, batch, connector, commons) 也不起作用,因为我们的模块是相互依赖的,我们 必须全部构建

您对改进大型项目的构建时间有什么建议吗?

提前致谢。

【问题讨论】:

  • 我在我从事的项目中遇到过很多次。我不认为 15 分钟的构建时间特别长。您能否尝试通过在提交之前解雇未运行测试的开发人员来激励开发人员?
  • 我们一天提交了很多次,每次提交都要等 15 分钟,非常令人沮丧。特别是当您解决错误和回归时。所以我不认为这是因为我们有一两个开发人员没有测试头脑,而是因为这真的很痛苦。
  • 在开发者的构建中可能不需要集成测试。
  • 也许你可以加快你的测试?
  • 如果mvn -T 1C 消耗了太多资源,那么您应该找到瓶颈并适当地升级您的开发机器。您也可以尝试mvn -T n 其中n 是一些常量,以使用小于1C 的常量池大小

标签: java spring maven spring-mvc spring-batch


【解决方案1】:

不要在普通配置文件中运行集成测试,只让开发人员在运行单元测试后签入。

在单独的服务器(构建服务器或持续集成服务器,如 Jenkins 或类似服务器)上运行集成测试。让构建服务器向签入错误代码的开发人员发送电子邮件。

在我们的办公室里,我们也有大屏幕显示每个模块的绿色/黄色/红色标志,因此每个人都可以看到模块是否不稳定(以及自上次稳定构建以来谁签入了)。

【讨论】:

    【解决方案2】:
    1. 将内存配置调整到最佳状态,例如:将此行添加到 mvn.bat set MAVEN_OPTS=-Xmx512m -XX:MaxPermSize=256m

    2. mvn 的清理阶段通常会删除目标文件夹。相反,如果我们重命名目标文件夹,清理阶段会快得多。

    3. -Dmaven.test.skip=true 将跳过测试执行。

    4. 将 -Denforcer.skip=true 添加到 mvn 命令行参数(这是强制执行 maven、jdk 等版本,我们可以在初始运行后跳过它)

    5. 在构建阶段禁用非关键操作:分析、javadoc 生成、源代码打包。这将节省大量时间。

    6. Spawnig 新进程还有助于缩短时间 -Dmaven.junit.fork=true(将 junit 测试分叉到新进程中)-Dmaven.compile.fork=true(分叉编译)

    希望对你有帮助。

    【讨论】:

      【解决方案3】:

      集成测试消耗了大量时间 (60%)。

      通常,您不希望在开发人员机器上构建期间运行集成测试。只是排除它们。但请确保在持续集成服务器上运行它们。

      【讨论】:

        【解决方案4】:

        拥有一个构建服务器,该服务器会在有人签入后自动执行完整构建并运行测试。如果构建或测试失败,立即以某种适当显眼的方式标记它,包括向签入的人发送电子邮件。

        【讨论】:

          【解决方案5】:

          所以我们的开发人员没有动力保持这种做法...... ... 我们 消耗开发人员机器的所有资源,因此在构建期间 开发者不能做任何事情

          如果开发人员不想在提交之前全部构建的主要原因是在 maven 构建期间他们的计算机是无用的(由于 maven 使用了所有可用资源),让他们指定多少maven 应该使用的资源。

          示例(使用 Windows cmd),而不是:

          mvn clean package
          

          你可以使用:

          start /affinity 3 mvn clean package
          

          在这种情况下,maven 将使用 2 个 cpu 核心(我有 8 个 cpu 核心),因此在 maven 构建生命周期中,我仍然可以在我的机器上工作。

          集成测试消耗大量时间 (60%)

          我会说测试很重要,但跳过测试可以节省一些时间:

          mvn clean package -DskipTests
          

          更多关于处理器关联的信息可以在这里找到:http://www.techrepublic.com/blog/windows-and-office/change-the-processor-affinity-setting-in-windows-7-to-gain-a-performance-edge/

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-06-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-09-13
            相关资源
            最近更新 更多