使用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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/946233.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【从零开始入门unity游戏开发之——C#篇43】C#补充知识——值类型和引用类型汇总补充、变量的生命周期与性能优化、值类型和引用类型组合使用

文章目录 一、值类型和引用类型汇总补充1、值类型和引用类型汇总2、值类型和引用类型的区别3、简单的判断值类型和引用类型 二、变量的生命周期与性能优化1、**栈和堆的区别**2、**变量生命周期**3、**垃圾回收(GC)机制**4、**代码示例与优化**4.1. 临时…

65.基于SpringBoot + Vue实现的前后端分离-阿博图书馆管理系统(项目 + 论文PPT)

项目介绍 随着社会的发展,计算机的优势和普及使得阿博图书馆管理系统的开发成为必需。阿博图书馆管理系统主要是借助计算机,通过对图书借阅等信息进行管理。减少管理员的工作,同时也方便广大用户对所需图书借阅信息的及时查询以及管理。 本站…

系统报错:由于找不到msvcp140.dll msvcp140_1.dll无法继续执行问题解决

Java资深小白,不足之处,或者有任何错误欢迎指出。 --蓝紫电脑重装后安装mysql,在执行时mysqld -install时出现系统报错:由于找不到msvcp140.dll无法继续执行、由于找不到msvcp140_1.dll无法继续执行。 尝试了其他博主提出的解决方案要么无效…

【再谈设计模式】策略模式 ~ 算法与行为的灵活调度员

本章内容思维导图: ​ 一、引言 在软件工程,软件开发过程中,我们常常会遇到这样的情况:需要根据不同的条件或者用户输入来执行不同的算法或者操作流程。例如,在一个电商系统中,根据用户的会员等级&#xff…

019-spring-基于aop的事务控制原理

1、事务配置&#xff1a; <tx:annotation-driven transaction-manager"transactionManager"/> transaction-manager 默认是找这个bean&#xff1a;transactionManager 2、从命名空间开始找到对应的解析配置如下&#xff1a; 对应的是这个 后续跟源码没有搞明…

Cursor登录按钮点击没反应

问题 系统&#xff1a;Windows11 Cursor&#xff1a;Cursor 0.44.9 当安装Cursor打开进行登录时&#xff0c;点击Sign in没反应 解决方案 1.打开window11的设置 2.点击应用中的默认应用 3.在设置应用程序的默认值中搜索Google&#xff08;没有Google浏览器的尝试下载一个&a…

30分钟搭建 Typecho 个人博客教程

Typecho是一款PHP博客程序&#xff0c;相比于WordPress&#xff0c;Typecho显得更加的轻量级和简洁。现在越来越多的人倾向于用Typecho来搭建个人博客——众所周知&#xff0c;能跑WordPress的机器都不便宜。 Typecho是一款国人团结打造的开源博客系统&#xff0c;和WordPress…

机器学习详解(11):分类任务的模型评估标准

模型评估是利用不同的评估指标来了解机器学习模型的性能&#xff0c;以及其优势和劣势的过程。评估对于确保机器学习模型的可靠性、泛化能力以及在新数据上的准确预测能力至关重要。 文章目录 1 介绍2 评估准则3 分类指标3.1 准确率 (Accuracy)3.2 精确率 (Precision)3.3 召回率…

RabbitMQ - 4 ( 22000 字 RabbitMQ 入门级教程 )

一&#xff1a; RabbitMQ 高级特性 前面主要讲解了 RabbitMQ 的概念和应用。RabbitMQ 实现了 AMQP 0-9-1 规范&#xff0c;并在此基础上进行了多项扩展。在 RabbitMQ 官方网站中详细介绍了其特性&#xff0c;我们将其中一些重要且常用的特性挑选出来进行讲解。 1.1 消息确认 …

图表控件Aspose.Diagram入门教程(7):在 C# 中删除 Visio 形状保护

是一个关于Microsoft Visio文件使用的类库。在ASP .NET网页应用程序、web服务器和Windows应用程序上的VSD和VDX 文件中&#xff0c;开发者仍然可以使用Aspose.Diagram。它还允许您在打开的文件中编辑图表的元素&#xff0c;然后以Visio和XML的格式导出。 ​ 在某些情况下&#…

Python学习(5):数据结构

1 列表 1.1 列表方法 列表数据类型支持很多方法&#xff0c;列表对象的所有方法所示如下&#xff1a; list.append(x)&#xff1a;在列表末尾添加一项。 类似于 a[len(a):] [x]。list.extend(iterable)&#xff1a;通过添加来自 iterable 的所有项来扩展列表。 类似于 a[len…

Qanything 2.0源码解析系列6 PDF解析逻辑

Qanything 2.0源码解析系列6: PDF解析逻辑 type: Post status: Published date: 2024/12/04 summary: 深入剖析Qanything是如何拆解PDF的,核心是pdf转markdown category: 技术分享 原文:www.feifeixu.top 😀 前言: 在前面的文章中探究了图片是怎么进行解析的,这篇文章对…

【OpenGL ES】GLSL基础语法

1 前言 本文将介绍 GLSL 中数据类型、数组、结构体、宏、运算符、向量运算、矩阵运算、函数、流程控制、精度限定符、变量限定符&#xff08;in、out、inout&#xff09;、函数参数限定符等内容&#xff0c;另外提供了一个 include 工具&#xff0c;方便多文件管理 glsl 代码&a…

端口被占用

端口8080被占用 哈哈哈&#xff0c;我是因为后端项目跑错了&#xff0c;两个项目后端名称太像了&#xff1b; &#xff08;1&#xff09;netstat -aon | findstr 8080&#xff0c;找到占用8080端口的进程号&#xff0c;获取对应的进程号pid&#xff1b; &#xff08;2&#…

Spring中的设计模式

Spring中的设计模式 控制反转(IoC)和依赖注入(DI) IoC 是一个原则&#xff0c;而不是一个模式&#xff0c;以下模式&#xff08;但不限于&#xff09;实现了 IoC 原则。 **Spring IoC 容器就像是一个工厂一样&#xff0c;当我们需要创建一个对象的时候&#xff0c;只需要配置…

【2025 Rust学习 --- 09 特型和泛型】

特型和泛型 Rust 通过两个相关联的特性来支持多态&#xff1a;特型和泛型。许多 程序员熟悉这些概念&#xff0c;但 Rust 受到 Haskell 类型类&#xff08;typeclass&#xff09;的启发&#xff0c;采用 了一种全新的方式。 1、特型是 Rust 体系中的接口或抽象基类。乍一看&a…

【开源免费】基于Vue和SpringBoot的网上商城系统(附论文)

本文项目编号 T 129 &#xff0c;文末自助获取源码 \color{red}{T129&#xff0c;文末自助获取源码} T129&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

使用Locust对MySQL进行负载测试

1.安装环境 pip install locust mysql-connector-python 2.设置测试环境 打开MySQL服务 打开Navicat新建查询&#xff0c;输入SQL语句 3.编写locust脚本 load_mysql.py # codingutf-8 from locust import User, TaskSet, task, between import mysql.connector import ran…

MF248:复制工作表形状到Word并调整多形状位置

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

极品飞车6的游戏手柄设置

极品飞车&#xff0c;既可以用键盘来控制车辆的前进、后退、左转、右转、加速与减速&#xff0c;也可以使用游戏手柄来操作车辆的运行。需要注意的是&#xff0c;极品飞车虽然支持手柄&#xff0c;但是仅支持常见的北通、罗技还有部分Xbox系列的手柄&#xff0c;至于其他的PS4手…