我正在使用本地工件来代理请求,但构建和测试阶段仍然有点慢。慢的不是实际的编译和测试,而是 maven2 框架的“热身”。有任何想法吗?
8 回答
有一些可能性可以优化一些构建任务。例如,“清理”任务可以使用简单的技巧从几分钟优化到几毫秒——重命名“目标”文件夹而不是删除。
要获取详细信息,请参阅加速 Maven 构建。
我不知道您使用的是哪个版本的 Maven,我假设是 2,但我会给出我用于 Maven 1.x 的内容以加快速度并使构建速度更快。
这些会将junit测试分叉到一个新进程中(当您在测试等中使用环境变量时也会有所帮助,并为测试提供更多内存。
-Dmaven.junit.fork=true
-Dmaven.junit.jvmargs=-Xmx512m
这会分叉编译,这可能会为您加快速度
-Dmaven.compile.fork=true
我希望这可以帮助一点,试试看。
如果您使用的是 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%。
将内存配置调整为最佳,例如:将此行添加到 mvn.bat set MAVEN_OPTS=-Xmx512m -XX:MaxPermSize=256m
mvn 的清理阶段通常会删除目标文件夹。相反,如果我们重命名目标文件夹,清理阶段会快得多。< quickClean >
-Dmaven.test.skip=true 将跳过测试执行。
将 -Denforcer.skip=true 添加到 mvn 命令行参数(这是强制执行 maven、jdk 等版本,我们可以在初始运行后跳过它)
在构建阶段禁用非关键操作:分析、javadoc 生成、源打包。这将节省大量时间。
Spawnig 新进程还有助于及时改进 -Dmaven.junit.fork=true(将 junit 测试分叉到新进程中) -Dmaven.compile.fork=true(分叉编译)
希望能帮助到你。
您可以使用-DskipTests=true
跳过单元测试。这将加快构建
我发现解析反应器项目比单 pom 项目慢得多。如果您的构建是反应器(多模块)并且您的开发人员没有同时处理所有模块,您可以删除父 POM 并单独构建它们,使用本地 repo 解决依赖关系。缺点是您需要安装或部署模块才能使其依赖项看到更改。
此外,您可能想查看新的 Maven 2.1 M1,其中包含一些显着的速度改进。
如果这些都没有帮助,请发布有关您的项目配置(模块结构和插件)、命令行参数和硬件配置(内存和磁盘)的更多详细信息。使用 -X 运行 Maven 也可能显示它在哪里花费时间。
我会使用本地安装的 Nexus。
最初,您应该使用类似的方法对构建时间进行更精细的分析,并确定花费最多时间的候选者。
测试是否会在每个测试中启动 H2 数据库?下载外部jar文件是否需要时间?这将指导您将调查重点放在哪里。仅仅应用 go-fast 标志通常不起作用,因为默认情况下它们已经包含在内,并且您不希望用跳过标志来牺牲您的测试。