【问题标题】:How can I speed up my maven2 build?如何加快我的 maven2 构建速度?
【发布时间】:2008-10-02 10:37:23
【问题描述】:

我正在使用本地工件来代理请求,但构建和测试阶段仍然有点慢。慢的不是实际的编译和测试,而是 maven2 框架的“热身”。有什么想法吗?

【问题讨论】:

  • 如果您在带外找到一个好的答案(例如在其他网站上),如果您在此处发布它们作为答案,我们将不胜感激。
  • 我发现this article 很有帮助。限制互联网访问对我来说很有效。

标签: maven-2


【解决方案1】:

有一些可能性可以优化一些构建任务。例如,“清理”任务可以使用简单的技巧从几分钟优化到几毫秒 - 重命名“目标”文件夹而不是删除。

如需了解具体操作方法,请参阅Speed up Maven build

【讨论】:

  • 巧妙的技巧,我也经常在清洁任务上浪费过多的时间。
  • 我解决了这个问题一段时间,并花时间写了一篇关于它的博客文章......希望它可以帮助其他人! urbancat.org/2012/05/how-to-speed-maven-up.html
  • @nadav 链接失效了。你能纠正一下吗?
【解决方案2】:

我不知道您使用的是哪个版本的 Maven,我假设是 2,但我会给出我用于 Maven 1.x 的版本以加快速度并使构建速度更快。

这些会将 junit 测试分叉到一个新进程中(当您在测试等中使用环境变量并为测试提供更多内存时也会有所帮助。

-Dmaven.junit.fork=true
-Dmaven.junit.jvmargs=-Xmx512m

这可能会为您加快编译速度

-Dmaven.compile.fork=true

希望对你有一点帮助,试试看。

另请参阅get more speed with your maven2 build

【讨论】:

  • 我正在使用 maven2,但它是一个不错的链接,我一定会尝试使用该修补版本进行下载。然而,问题在于更多的构建和测试启动时间......
  • 启用 fork 让我的项目稍微快了一点
【解决方案3】:

如果你使用的是 Maven3 ($ mvn -version),你也可以关注这个guide。就我而言,结果是:

正常执行:

$ mvn clean install 
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 03:05 min
[INFO] Finished at: 2015-07-15T11:47:02+02:00
[INFO] Final Memory: 88M/384M

使用并行处理(4 个线程):

$ mvn -T 4 clean install
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 02:22 min (Wall Clock)
[INFO] Finished at: 2015-07-15T11:50:57+02:00
[INFO] Final Memory: 80M/533M

并行处理(每个核心 2 个线程)

$ mvn -T 2C clean install

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 02:12 min (Wall Clock)
[INFO] Finished at: 2015-07-15T12:00:29+02:00
[INFO] Final Memory: 87M/519M
[INFO] ------------------------------------------------------------------------

正如我们所见,差别几乎是一分钟,速度提高了近 20-30%。

【讨论】:

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

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

    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(分叉编译)

      希望对你有帮助。

    【讨论】:

      【解决方案5】:

      您可以使用-DskipTests=true 跳过单元测试。这将加快构建速度

      【讨论】:

      • 所以一开始就不做任何测试..?
      • CI 机器人在构建时会完成所有这些工作,因此它们需要在那里。
      • -o 指示离线模式有帮助,因为它不查看快照的远程更新
      【解决方案6】:

      我发现解析 reactor 项目比单 pom 项目慢得多。如果您的构建是反应器(多模块)并且您的开发人员没有同时处理所有模块,您可以删除父 POM 并单独构建它们,使用本地 repo 解决依赖关系。缺点是您需要安装或部署一个模块才能使其依赖项看到更改。

      另外,您可能想看看新的 Maven 2.1 M1,它包含一些显着的速度改进。

      如果这些都没有帮助,请发布有关您的项目配置(模块结构和插件)、命令行参数和硬件配置(内存和磁盘)的更多详细信息。使用 -X 运行 Maven 也可能会显示它在哪里花费时间。

      【讨论】:

      • 这确实是我正在使用的反应堆项目。三个小模块和一个 webprojekt。我尝试了 2.1 版本,它看起来确实快了一点。
      【解决方案7】:

      我会使用本地安装的 Nexus。

      【讨论】:

      • Nexus 也不错。我已经使用了nexus和artifactory,它们都非常快。 Nexus 更容易配置 IMO
      • Nexus 做了什么来帮助这个过程?
      【解决方案8】:

      最初,您应该使用this 之类的方式对构建时间进行更精细的分析,并确定花费最多时间的候选者。

      每个测试是否都在构建一个 H2 数据库?下载外部jar文件是否需要时间?这将指导您将调查重点放在哪里。仅仅应用 go-fast 标志通常不起作用,因为默认情况下它们已经包含在内,而且您不希望用跳过标志来牺牲您的测试。

      【讨论】:

        猜你喜欢
        • 2011-01-15
        • 1970-01-01
        • 2012-02-13
        • 1970-01-01
        • 2015-11-02
        • 2023-03-08
        • 2019-06-11
        • 2011-07-04
        • 1970-01-01
        相关资源
        最近更新 更多