前言:
早上打包项目的时候发现打包速度很慢,耗时颇久,就在一个群里求助,如何使maven
打包效率加快,一个群友发来一个链接,如图。
Google
后发现这个工具居然是apache maven
团队出品,并且是maven
的一个子项目,所以使用maven
可以无缝切换到mvnd
。
Mvnd 简介
maven-mvnd
是Apache Maven
团队借鉴了Gradle
和Takari
后衍生出的更快的构建工具。mvnd
内嵌了Maven
,也正是因为这个原因我们可以无缝地将Maven
切换为mvnd
(也不需要单独安装Maven
)。
在设计上,在mvnd
中会生成一个或多个的守护进程来服务构建请求以此来达到并行构建的效果。另外在VM
的选择上,mvnd
使用了GraalVM
来代替传统的JVM
,与之相比GraalVM
启动速度更快,占用的内存更少。
根据文档描述,与传统的Maven
相比mvnd
具有以下优势:
- 运行构建的
JVM
不需要为每个构建重新启动。
Maven
插件类的类加载器缓存在多个构建中,插件jars
只会被读取和解析一次。
JVM
中JIT
生成的本机代码会被保留。与Maven
相比,JIT
编译花费的时间更少。在重复构建期间,JIT
优化的代码立即可用。这不仅适用于来自Maven
插件和Maven
内核的代码,也适用于来自JDK
本身的所有代码。
默认情况下,mvnd
使用多个CPU
内核并行构建模块。使用的内核数由公式Math.max(Runtime.getRuntime().availableProcessors() - 1, 1)
给出。 如果您的源代码树不支持并行构建,请在命令行上传递-T1
以使您的构建串行。
Github地址:传送门
安装
最新版本是0.7.1
;
在解压后根目录的conf
文件夹下找到mvnd.properties
配置文件,配置maven.settings
属性值为maven
配置文件settings.xml
的文件路径。注意:此settings.xml
文件存放位置不受限制。
复制bin
目录路径,打开系统设置,最新版本win10 在系统/关于/高级系统设置/环境变量(N)...
下配置系统环境变量
确认返回即可。
测试
D:\>mvnd -version
mvnd native client 0.7.1-windows-amd64 (97c587c11383a67b5bd0ff8388bd94c694b91c1e)
Terminal: org.jline.terminal.impl.jansi.win.JansiWinSysTerminal
[WARN]
[WARN] Some problems were encountered while building the effective settings
[WARN] Unrecognised tag: 'url' (position: START_TAG seen ...<!-- \u914d\u7f6e JDK \u7248\u672c -->\r\n <url>... @307:14) @ D:\APP\apache-maven-3.8.2\conf\settings.xml, line 307, column 14
[WARN]
Apache Maven 3.8.3 (ff8e977a158738155dc465c6a97ffaf31982d739)
Maven home: D:\APP\mvnd-0.7.1-windows-amd64\mvn
Java version: 1.8.0_281, vendor: Oracle Corporation, runtime: C:\Program Files\Java\jdk1.8.0_281\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
$ mvnd --help
# mvn 打包命令
mvn clean package -Dmaven.test.skip=true
# 执行结果
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 8.405 s
[INFO] Finished at: 2021-12-29T11:18:05+08:00
[INFO] ------------------------------------------------------------------------
# 执行打包命令
mvnd clean package -Dmaven.test.skip=true
# 执行结果
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.278 s (Wall Clock)
[INFO] Finished at: 2021-12-29T11:19:40+08:00
[INFO] ------------------------------------------------------------------------
差距很大,俺很惊喜😁😁😁。如果你有更加不错的方案,可以在下方留言区讨论,共同学习进步。