35

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

4

8 回答 8

24

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

要获取详细信息,请参阅加速 Maven 构建

于 2009-02-19T09:15:12.210 回答
9

我不知道您使用的是哪个版本的 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

于 2008-10-02T10:42:30.837 回答
9

如果您使用的是 Maven3 ( $ mvn -version),您也可以按照本指南进行操作。就我而言,结果是:

正常执行:

$ 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%。

于 2015-07-15T09:56:34.957 回答
4
  1. 将内存配置调整为最佳,例如:将此行添加到 mvn.bat set 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(分叉编译)

    希望能帮助到你。

于 2013-09-20T08:10:42.227 回答
3

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

于 2011-12-28T20:41:42.023 回答
2

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

此外,您可能想查看新的 Maven 2.1 M1,其中包含一些显着的速度改进。

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

于 2008-10-02T15:25:01.173 回答
1

我会使用本地安装的 Nexus。

于 2009-02-19T19:11:46.253 回答
0

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

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

于 2016-05-09T08:49:22.090 回答