来源:https://blog.csdn.net/chen417980762
先上结论!!!
经测试:
多模块清理并打包提升:约3.5倍
多模块不清理打包提升:约5.5倍
单模块提升:约2倍
从测试结果来看,多模块效率提升更高。在使用mvnd package打包多模块时,可在控制台看到多个模块是并行执行的(mvn是串行执行),所以效率提升更多;而单个模块打包没有了多线程的优化,只是mvnd相对于原mvn的优化也提升了约2倍速率。
以上数据仅在个人电脑上运行几次计算的粗略数据,不同的电脑会有所不同,但提升的效率还是很明显的。推荐上车!!!
另外maven mvnd与maven的使用除了命令不同(mvnd和mvn),其它的一摸一样。
一、mvnd说明
使用过maven、gradle、Takari构建工具的会发现maven的构建速度很慢,于是maven为了提升maven的构建速度,于2023年推出了maven mvnd,想以此打个翻身仗。
下面是官方摘录的介绍
架构概述:
mvnd嵌入 Maven(因此无需单独安装 Maven)。
实际的构建发生在一个长期存在的后台进程中,也称为守护进程 daemon。
一个守护程序实例可以为来自客户端的多个连续请求提供服务。
客户端是使用 GraalVM 构建的原生可执行文件。 与启动传统 JVM 相比,它启动速度更快,使用的内存更少。
如果没有空闲守护进程来提供构建请求,则可以并行生成多个守护进程。
此体系结构具有以下优点:
用于运行实际构建的 JVM 不需要为每个构建重新启动。
保存 Maven 插件类的类加载器缓存在多个构建中。因此,将读取插件 jar 并且只解析了一次。Maven 插件的 SNAPSHOT 版本不会缓存。
JVM 内部的 Just-In-Time (JIT) 编译器生成的本机代码也被保留。与原生 Maven 相比, JIT 编译所花费的时间更少。在重复构建期间,JIT 优化代码可用 马上。这不仅适用于来自 Maven 插件和 Maven Core 的代码,也适用于所有传入的代码 从 JDK 本身。
github地址:https://github.com/apache/maven-mvnd
二、软件下载
https://downloads.apache.org/maven/mvnd/
根据安装的目标操作系统,选择对应的版本,下面以windows系统为例,同一个操作系统有好多个文件,不懂的,就选择文件大的,用过maven的都知道有个几十M大小,那些kb级别的小卡拉米肯定不够格。
三、安装
将下载的zip压缩包复制到想要安装的目录解压,尽量不要放在有中文的目录下(有经验的人应该吃过类似的亏),可按需修改文件夹名
mvnd目录结构
修改配置文件
打开config/mvnd.properties文件拉到最下面,指定maven的配置文件。
如电脑上之前有用maven,可直接指定原maven的配置文件,省去了settings.xml配置文件修改,如果没有可以指定mvnd/mvn/conf/settings.xml配置文件,按需修改配置文件。
配置MAVEN_HOME环境变量
将mvnd目录配置为环境变量
配置path环境变量
可以直接配mvnd的bin目录,也可以用上面的maven_home环境变量方式%MAVEN_HOME%\bin
验证配置是否成功,如下图输出版本号,即为配置成功
四、编译打包速度对比测试
测试笔记本配置:
CPU:Intel(R) Core(TM) Ultra 5 125H 3.60 GHz 14核18线程
32G内存
1T SSD
1.maven测试
1.1多模块清理并打包
共编译打包19个模块。
mvn clean package1.2多模块不清理打包
mvn package1.3单模块清理并打包
mvn clean package2.mvnd测试
2.1多模块清理并打包
mvnd clean package2.2多模块不清理打包
mvnd package2.3单模块清理并打包
mvnd clean package3.效率测试总结
多模块清理并打包提升:65/17≈3.5倍
多模块不清理打包提升:22/4≈5.5倍
单模块提升:10/5=2倍
从测试结果来看,多模块提升的效率更高。在使用mvnd package打包多模块时,可在控制台看到多个模块是并行执行编译打包的,所以效率提升更快;而单个模块打包没有了多线程的优化,只是mvnd相对于原mvn的优化也提升了2倍速率。
4.控制台中文乱码问题
如下图编译控制台输出的中文是乱码。
尝试过网上说的很多中方法如:在mvnd.properties和setting.xml中配置编码为utf-8、配置系统环境变量等都无效,唯得下面一法解决了乱码问题。
如下图可见mvnd控制台默认使用的是PowerShell,那么解决问题的思路就是修改PowerShell的编码方式
1.临时修改编码为utf-8
复制下面代码在powershell控制台执行,再编译项目可查看效果
$OutputEncoding = [System.Text.Encoding]::UTF8 [Console]::OutputEncoding = [System.Text.Encoding]::UTF8 [Console]::InputEncoding = [System.Text.Encoding]::UTF82.永久修改:
将以下内容添加到 PowerShell 的 profile 文件中,profile文件位置可在powershell控制台执行命令$profile获取
# 设置编码为UTF-8 $OutputEncoding = [System.Text.Encoding]::UTF8 [Console]::OutputEncoding = [System.Text.Encoding]::UTF8 [Console]::InputEncoding = [System.Text.Encoding]::UTF8 # 设置JAVA_TOOL_OPTIONS环境变量 $env:JAVA_TOOL_OPTIONS = "-Dfile.encoding=UTF-8"若在路径中找不到profile配置文件,在powershell控制台执行下面命令创建profile文件
notepad $profile打开文件输入上面的内容,保存
再重新编译查看效果,如下图,不要在之前打开的控制台执行,因为已打开的控制台不受新的配置影响。
另外在直接cmd窗口中使用mvnd命令,也会是乱码,尝试了几种方式都无效,如果要在命令行编译的话,请使用powershell。
五、IDEA中使用mvnd
5.1原来的maven配置不用动
由于我安装的idea是2023版,而mvnd也是2023年才推出,可能idea这个maven侧边窗口还不支持mvnd。不知道2024版有没有支持?
下面的操作基于2023版本。
将mavne主路径配置为mvnd目录,侧边栏运行maven命令,会有如下错误,
所以不动原来的配置,可以照常在maven侧边栏直接使用mvn命令
也可以直接配置mvnd里面的mvn,但是要注意maven版本的兼容性。
5.2安装maven helper插件(重点)
通过maven helper插件来运行mvnd。
在应用市场搜做maven helper插件进行安装
安装完成后,重启idea,配置mvnd命令,如下图
5.3使用mvnd编译项目
安装maven helper插件后,会在项目的右键菜单上多出两个maven菜单(如下图),执行菜单中的命令,就会使用上图配置的mvnd命令。
或者在maven窗口中使用mvnd
在项目或模块上右键,运行maven命令;执行命令结果,可以看到执行的命令是mvnd package
原来的mvn双击生命周期的操作仍然可用
在多环境配置文件编译时,使用maven helper的右键菜单构建时,可以清楚的看到执行的命令,使用的是什么配置环境
至此mvnd的安装、配置、使用流程已全部完成。
==好了,给粉丝个福利==
==打车千万别直接去APP,记得先领券== 亲测一单省了30块钱