maven-mvnd高性能构建插件
1. 简介
mvnd
属于maven
的子项目,目的是为了提高构建性能,且学习成本很低,可以花极少的时间学习就能大幅提高工作效率。
GitHub:https://github.com/apache/maven-mvnd
2.特性
-
mvnd
内嵌了maven
(无需另外安装maven
,已经安装过maven
也不用担心冲突) - 实际的构建是在长期的守护进程中进行
- 一个守护进程可以为多个构建请求提供服务
-
mvnd
客户端是基于GraalVM
构建,与传统 JVM 相比,它启动速度更快,使用的内存更少。
3.优势
- 用于运行实际构建的
JVM
不需要为每个构建重新启动。 - 持有
Maven
插件类的类加载器被缓存在多个构建中。因此,插件 jar 只需读取和解析一次。 -
GraalVM
的JIT
(Just In Time)实时编译特性也被运用到Maven
构建作业中。JIT可以大大降低编译时间,在重复构建过程中,JIT
优化代码立即可用,也极大提高了构建效率。
4.安装
- 下载对应系统的压缩包
- 解压后修改配置文件,修改
conf/mvnd.properties
拉到底部修改
settings
文件目录,可以指向原安装maven
中的xml文件,也可单独放到一个目录中。
- 配置环境变量
将
mvnd
的bin
目录配置到环境变量path
中
5. 测试
以多模块复杂项目在Windows构建为例。
默认情况下,mvnd
使用多个 CPU 内核并行构建模块,如果该项目不支持并行构建,可以增加-T1
参数进行串行构建。
-
maven
构建
# 执行maven命令开始构建
mvn clean -U -Dmaven.test.skip=true package
# 最终结果
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 05:14 min
[INFO] Finished at: 2022-01-18T11:28:46+08:00
[INFO] ------------------------------------------------------------------------
-
mvnd
构建(并行)
# 执行maven-mvnd命令开始构建
mvnd clean -U -Dmaven.test.skip=true package
# 最终结果
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:45 min (Wall Clock)
[INFO] Finished at: 2022-01-18T11:31:19+08:00
[INFO] ------------------------------------------------------------------------
-
mvnd
构建(串行)
# 执行maven-mvnd命令开始构建
mvnd clean -U -Dmaven.test.skip=true package -T1
# 最终结果
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 04:51 min
[INFO] Finished at: 2022-01-18T11:39:17+08:00
[INFO] ------------------------------------------------------------------------
- 参照构建时间,并行方式构建大幅减少。