一、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 package
图片
1.2多模块不清理打包
mvn package
图片
1.3单模块清理并打包
mvn clean package
图片

2.mvnd测试

2.1多模块清理并打包
mvnd clean package
图片
2.2多模块不清理打包
mvnd package
图片
2.3单模块清理并打包
mvnd clean package
图片

3.效率测试总结

多模块清理并打包提升:65/17≈3.5倍

多模块不清理打包提升:22/4≈5.5倍

单模块提升:10/5=2倍

从测试结果来看,多模块提升的效率更高。在使用mvnd package打包多模块时,可在控制台看到多个模块是并行执行编译打包的,所以效率提升更快;而单个模块打包没有了多线程的优化,只是mvnd相对于原mvn的优化也提升了2倍速率。

4.控制台中文乱码问题

如下图编译控制台输出的中文是乱码。

图片

尝试过网上说的很多中方法如:在mvnd.propertiessetting.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]::UTF8
2.永久修改:

将以下内容添加到 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的安装、配置、使用流程已全部完成。

来源:https://blog.csdn.net/chen417980762

扫码领红包

微信赞赏支付宝扫码领红包

发表回复

后才能评论