当前位置: 首页 > article >正文

使用maven-mvnd替换maven大大提升编译打包速度

先上结论!!!

多模块清理并打包提升:约3.5倍

多模块不清理打包提升:约5.5倍

单模块提升:约2倍

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

先叠个甲:以上数据仅在个人电脑上运行几次计算的粗略数据,不同的电脑会有所不同,但提升的效率还是很明显的。

另外maven mvnd与maven的使用除了命令不同(mvnd和mvn),其它的一摸一样。

一.mvnd说明

使用过mavne、gradle、Takari构建工具的会发现maven的构建速度很慢,于是maven为了提升maven的构建速度,于2023年推出了maven mvnd,想以此打个翻身仗。

下面是官方摘录的介绍

架构概述:

  • mvnd嵌入 Maven(因此无需单独安装 Maven)。

  • 实际的构建发生在一个长期存在的后台进程中,也称为 daemon。

  • 一个守护程序实例可以为来自客户端的多个连续请求提供服务。mvnd

  • 客户端是使用 GraalVM 构建的原生可执行文件。 与启动传统 JVM 相比,它启动速度更快,使用的内存更少。mvnd

  • 如果没有空闲守护进程来提供构建请求,则可以并行生成多个守护进程。

此体系结构具有以下优点:

  • 用于运行实际构建的 JVM 不需要为每个构建重新启动。

  • 保存 Maven 插件类的类加载器缓存在多个构建中。因此,将读取插件 jar 并且只解析了一次。Maven 插件的 SNAPSHOT 版本不会缓存。

  • JVM 内部的 Just-In-Time (JIT) 编译器生成的本机代码也被保留。与原生 Maven 相比, JIT 编译所花费的时间更少。在重复构建期间,JIT 优化代码可用 马上。这不仅适用于来自 Maven 插件和 Maven Core 的代码,也适用于所有传入的代码 从 JDK 本身。

github地址:https://github.com/apache/maven-mvnd?tab=readme-ov-file#install-manually

二.软件下载

https://downloads.apache.org/maven/mvnd/

根据安装的目标操作系统,选择对应的版本,下面以windows系统为例,同一个操作系统有好多个文件,不懂的,就选择文件大的,用的maven的都知道有个几十M大小,那写kb级别的小卡拉米肯定不够格。

三.安装

将下载的zip压缩包复制到想要安装的目录解压,尽量不要放在有中文的目录下(有经验的人应该吃过类似的亏),可按需修改文件夹名

mvnd目录结构

修改配置文件

拉到文件最下面,指定maven的配置文件。

如电脑上之前有用maven,可直接指定原maven的配置文件,省去了settings.xml配置文件修改,如果没有可以指定mvnd/mvn/conf目录下的配置文件,自己按需修改settings.xml配置文件。

配置MAVEN_HOME环境变量(不配好像也没关系,只要配path就可以了)

将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多模块不清理打包

1.3单模块清理并打包

mvn clean package

2.mvnd测试

2.1多模块清理并打包

mvnd clean package

2.2.多模块不清理打包

mvnd package

2.3单模块清理并打包

mvnd clean package

3.效率测试总结

多模块清理并打包提升:\frac{60}{17}\approx 3.5

多模块不清理打包提升:\frac{22}{4}\approx 5.5

单模块提升:\frac{10}{5}=2

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

4.乱码问题

使用mvnd有中文乱码,看配置文件也没找到可配置编码的项,如有人解决了,麻烦留个言。

五.IDEA中使用mvnd

5.1.设置mvnd目录和配置文件

5.2.需要安装maven helper插件

安装完如提示重启,则重启idea,如无重启提示,安装完若找不到下面的maven helper配置项,重启看看。

配置mvnd命令

5.3使用mvnd编译项目

重点重点重点:原idea的maven侧边窗口的的命令已经无法使用了,会报错,如下图。

我当时卡在这里折腾了好久,网上找了好久也没得办法。

原因猜测:由于我安装的idea是2023版,而mvnd也是2023年才推出,idea这个maven侧边窗口还不支持mvnd。如果有安装2024版或更新版本的支持,或者2023版有解决方案的话,麻烦留个言。

只能在项目或模块上右键,运行maven命令

执行命令结果,可以看到执行的命令是mvnd package

至此mvnd的安装、配置、使用流程已全部完成。遗憾的是idea 2023的maven侧边窗口无法使用了,牺牲了一点便利性,可酌情使用。

由于在开发过程中,大部分场景是单个模块编译、打包,我还是喜欢使用原maven,方便使用idea的maven侧边栏功能。多模块批量打包时就在cmd窗口下使用mvnd命令。

快键操作方式:在项目或模块模块上右键-->在当前路径下打开终端-->输入mvnd package命令,默认为dev环境配置,如需编译其它环境请指定环境参数,如测试环境 mvnd package -P test


http://www.kler.cn/a/460264.html

相关文章:

  • 41.5 nginx拦截prometheus查询请求使用lua脚本做promql的检查替换
  • Pytorch使用手册-DCGAN 指南(专题十四)
  • springboot集成qq邮箱服务
  • 自由学习记录(31)
  • latex技巧
  • 建立一个Macos载入image的实例含界面
  • sublime 文件高亮设置
  • vim编辑器实用设置
  • VirtualBox新版本报错 Invalid installation directory解决方案
  • C#封送类
  • Tesseract-OCR 文字识别
  • 【Spring】Spring DI(依赖注入)详解—自动装配—byType实现原理
  • 智元与汇川加码,机器人如何利好电机市场?
  • Sigrity System SI SerialLink模式进行HDMI2协议仿真分析操作指导-TP1
  • AI安全的挑战:如何让人工智能变得更加可信
  • 【从零开始入门unity游戏开发之——C#篇41】C#迭代器(Iterator)——自定义类实现 foreach 操作
  • 图像处理-Ch7-小波函数
  • 开源大数据平台E-MapReduce
  • 【广州计算机学会、广州互联网协会联合主办 | ACM独立出版 | 高录用】第四届大数据、信息与计算机网络国际学术会议(BDICN 2025)
  • 【电路理论四】正弦电流电路
  • 前端经典面试合集(二)——Vue/React/Node/工程化工具/计算机网络
  • Log4j2的Filters配置详解(ThresholdFilter )
  • ROS自学笔记三十:话题消息输出并转换为Excel形式
  • python钉钉机器人
  • 【探商宝】企业查询多维度解析---创新信息篇
  • [硬件] DELL BIOS 相关注意事项