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

news2025/1/4 7:31:38

先上结论!!!

多模块清理并打包提升:约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.coloradmin.cn/o/2269148.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LeetCode - 初级算法 数组(删除排序数组中的重复项)

免责声明:本文来源于个人知识与公开资料,仅用于学术交流。 删除排序数组中的重复项 这篇文章讨论如何从一个非严格递增的数组 nums 中删除重复的元素,使每个元素只出现一次,并返回新数组的长度。因为数组是排序的,只要是相同的肯定是挨着的,所以我们需要遍历所有数组,然…

2024 年度总结

时光荏苒,2024 年即将画上句号,回顾这一年的写博历程,有付出、有收获、有成长,也有诸多值得回味与反思的瞬间。 一、内容创作 主题涉猎:这一年,我致力于探索多样化的主题,以满足不同读者群体的…

基于STM32位单片机的腕式运动体力监测装置设计

本设计基于STM32位单片机的腕式运动体力状态诊断系统装置。本系统内的使用的STM32单片机包含了心率检测电路、呼吸频率检测电路、OLED液晶显示电路、电源电路、蓝牙电路。通过心率传感器以及手指脉搏波动放大过后发送给比较器,结果处理后发送给单片机进行信息的收集…

LunarVim安装

LunarVim以其丰富的功能和灵活的定制性,迅速在Nvim用户中流行开来。它不仅提供了一套完善的默认配置,还允许用户根据自己的需求进行深度定制。无论是自动补全、内置终端、文件浏览器,还是模糊查找、LSP支持、代码检测、格式化和调试&#xff…

前端超大缓存IndexDB、入门及实际使用

文章目录 往期回顾项目实战初始化表获取列表新增表的数据项获取详情根据ID获取详情根据其他字段获取详情 删除数据 总结 往期回顾 在之前的文章中,我们介绍了IndexDB vs Cookies vs Session这几个的对比,但是没有做实际项目的演示,今天我们用…

面试题解,JVM的运行时数据区

一、请简述JVM运行时数据区的组成结构及各部分作用 总览 从线程持有的权限来看 线程私有区 虚拟机栈 虚拟机栈是一个栈结构,由许多个栈帧组成,一个方法分配一个栈帧,线程每执行一个方法时都会有一个栈帧入栈,方法执行结束后栈帧…

WAV文件双轨PCM格式详细说明及C语言解析示例

WAV文件双轨PCM格式详细说明及C语言解析示例 一、WAV文件双轨PCM格式详细说明1. WAV文件基本结构2. PCM编码方式3. 双轨PCM格式详细说明二、C语言解析WAV文件的代码示例代码说明一、WAV文件双轨PCM格式详细说明 WAV文件是一种用于存储未压缩音频数据的文件格式,广泛应用于音频…

QT------模型/视图

一、模型/视图结构概述 基本原理: Qt 的模型/视图(Model/View)架构将数据的存储和显示分离,提高了代码的可维护性和复用性。模型(Model):负责存储和管理数据,提供数据的访问接口&am…

vue3+ts+element-plus 表单el-form取消回车默认提交

问题描述:在表单el-form中的el-input中按回车后,页面会刷新,url也会改变, 回车前: 回车后: 相关代码: 解决方法1:在 el-form 上阻止默认的 submit 事件,增加 submit.pre…

掌握大数据处理利器:Flink 知识点全面总结【上】

1.Flink的特点 Apache Flink 是一个框架和分布式处理引擎,用于对无界和有界数据流进行状态计算。 Flink主要特点如下: 高吞吐和低延迟。每秒处理数百万个事件,毫秒级延迟。结果的准确性。Flink提供了事件时间(event--time)和处理时间(proces…

国产数据库-崖山使用介绍

本文档基于崖山数据库23.3 个人版本,单机(主备)部署模式的情况下的使用介绍。 数据库实例状态: NOMOUNT:仅读取参数文件,不加载数据库 MOUNT:读取控制文件,加载数据库&#xff…

Pytest基础01: 入门demo脚本

目录 1 Pytest接口测试 1.1 最简单版hello world 1.2 pytest.ini 2 pytest兼容unittest 3 封装pytest执行入口 1 Pytest接口测试 Pyest是一个可以用于接口测试的强大框架,开源社区也有非常多的pytest插件。 按江湖传统,学习一个新语言或者新框架&…

如何在没有 iCloud 的情况下将数据从 iPhone 传输到 iPhone

概括 您可能会遇到将数据从 iPhone 转移到 iPhone 的情况,尤其是当您获得新的 iPhone 15/14 时,您会很兴奋并希望将数据转移到它。 使用iCloud最终可以做到这一点,但它的缺点也不容忽视,阻碍了你选择它。例如,您需要…

streamlit、shiny、gradio、fastapi四个web APP平台体验

streamlit、shiny、gradio、fastapi四个web APP平台体验 经常被问的问题就是:web APP平台哪个好?该用哪个?刚开始只有用streamlit和shiny,最近体验了一下gradio和fastapi,今天根据自己的体会尝试着回答一下。 使用R语…

HTML5滑块(Slider)

HTML5 的滑块&#xff08;Slider&#xff09;控件允许用户通过拖动滑块来选择数值。以下是如何实现一个简单的滑块组件的详细说明。 HTML5 滑块组件 1. 基本结构 使用 <input type"range"> 元素可以创建一个滑块。下面是基本实现的代码示例&#xff1a; <…

探索 .idea 文件夹:Java Maven 工程的隐形守护者

一、.idea文件夹深度解析&#xff1a;IntelliJ IDEA项目配置的核心 在Java Maven工程的开发环境中&#xff0c;.idea文件夹扮演着举足轻重的角色。这是IntelliJ IDEA项目特有的一个配置文件夹&#xff0c;它包含了项目所需的各种配置信息&#xff0c;以确保项目能够在不同的开发…

遥感图像车辆检测-目标检测数据集

遥感图像车辆检测-目标检测数据集&#xff08;包括VOC格式、YOLO格式&#xff09; 数据集&#xff1a; 链接: https://pan.baidu.com/s/1XVlRTVWpXZFi6ZL_Xcs7Rg?pwdaa6g 提取码: aa6g 数据集信息介绍&#xff1a; 共有 1035 张图像和一一对应的标注文件 标注文件格式提供了…

[Qt] Qt介绍 | 搭建SDK

目录 1. Qt 简介 什么是 Qt&#xff1f; 1.1 引入 1.2 GUI 1.3 Qt 介绍 2. Qt 发展史 3. Qt 支持的平台 4. Qt 版本信息 5. Qt 的优点 6. Qt 应用场景 7. Qt 成功案例 8. Qt 发展前景及就业分析 二. Qt 开发环境搭建 1. 开发工具概述 2.Qt SDK 安装 3.使用 1. …

【机器学习】机器学习的基本分类-自监督学习-对比学习(Contrastive Learning)

对比学习是一种自监督学习方法&#xff0c;其目标是学习数据的表征&#xff08;representation&#xff09;&#xff0c;使得在表征空间中&#xff0c;相似的样本距离更近&#xff0c;不相似的样本距离更远。通过设计对比损失函数&#xff08;Contrastive Loss&#xff09;&…

xterm + vue3 + websocket 终端界面

xterm.js 下载插件 // xterm npm install --save xterm// xterm-addon-fit 使终端适应包含元素 npm install --save xterm-addon-fit// xterm-addon-attach 通过websocket附加到运行中的服务器进程 npm install --save xterm-addon-attach <template><div :…