再见Maven!官方推出全新一代Java项目构建工具,性能提升2~10倍

来源: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 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的安装、配置、使用流程已全部完成。

==好了,给粉丝个福利==

==打车千万别直接去APP,记得先领券== 亲测一单省了30块钱

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

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

相关文章

外卖订单自动化采集神器:3步实现美团饿了么订单数据自动汇总

外卖订单自动化采集神器:3步实现美团饿了么订单数据自动汇总 【免费下载链接】waimai-crawler 外卖爬虫,定时自动抓取三大外卖平台上商家订单,平台目前包括:美团,饿了么,百度外卖 项目地址: https://gitc…

裁员为什么先裁技术人员?网友一针见血

最近,看到了一个问题,问得很扎心。为什么裁员首先从技术人员开始?很多技术人员可能会感到困惑,甚至有些委屈:我们一直在默默地努力做出贡献,为什么最终却成了裁员的首批对象呢?我倒觉得未必&…

macOS安全验证终极解决方案:快速解决NotepadNext无法运行问题

macOS安全验证终极解决方案:快速解决NotepadNext无法运行问题 【免费下载链接】NotepadNext A cross-platform, reimplementation of Notepad 项目地址: https://gitcode.com/GitHub_Trending/no/NotepadNext 你是否曾经在macOS上尝试运行NotepadNext时&…

ZonyLrcToolsX 完整使用指南:跨平台歌词下载终极方案

ZonyLrcToolsX 完整使用指南:跨平台歌词下载终极方案 【免费下载链接】ZonyLrcToolsX ZonyLrcToolsX 是一个能够方便地下载歌词的小软件。 项目地址: https://gitcode.com/gh_mirrors/zo/ZonyLrcToolsX 还在为音乐播放时缺少同步歌词而烦恼吗?Zon…

Ice:重新定义Mac菜单栏的终极整理方案

Ice:重新定义Mac菜单栏的终极整理方案 【免费下载链接】Ice Powerful menu bar manager for macOS 项目地址: https://gitcode.com/GitHub_Trending/ice/Ice 你是否曾经面对过Mac菜单栏上拥挤不堪的图标海洋?那些不断累积的应用图标不仅占据了宝贵…

QQ音乐数据获取终极指南:Python工具快速上手完整教程

QQ音乐数据获取终极指南:Python工具快速上手完整教程 【免费下载链接】MCQTSS_QQMusic QQ音乐解析 项目地址: https://gitcode.com/gh_mirrors/mc/MCQTSS_QQMusic 在当今数字音乐时代,获取高质量音乐数据对于开发者来说至关重要。MCQTSS_QQMusic项…

Windows显示器亮度控制终极方案:Twinkle Tray完整使用手册

Windows显示器亮度控制终极方案:Twinkle Tray完整使用手册 【免费下载链接】twinkle-tray Easily manage the brightness of your monitors in Windows from the system tray 项目地址: https://gitcode.com/gh_mirrors/tw/twinkle-tray 在Windows系统环境下…

3分钟视频调色指南:用LosslessCut快速打造专业级色彩效果

3分钟视频调色指南:用LosslessCut快速打造专业级色彩效果 【免费下载链接】lossless-cut The swiss army knife of lossless video/audio editing 项目地址: https://gitcode.com/gh_mirrors/lo/lossless-cut 还在为视频色彩暗淡、色调不准而烦恼吗&#xff…

应用--Minishell实现

支持后台运行的Minishell实现一、具体代码#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/wait.h>int main() {char cmd[100];char *args[10];// 回收已经退出的子进程&#xff08;非阻塞&…

手机摄影测量革命:Meshroom带你从2D到3D的魔法之旅

你是否曾经想过&#xff0c;用手机随手拍的照片就能变成精致的3D模型&#xff1f;&#x1f4f8; 当普通照片在Meshroom中完成神奇蜕变&#xff0c;你会发现三维世界从未如此触手可及。今天&#xff0c;就让我们一同探索这个开源摄影测量软件的无限可能&#xff01; 【免费下载链…

如何用layerdivider实现一键智能图像分层?5分钟快速上手教程

如何用layerdivider实现一键智能图像分层&#xff1f;5分钟快速上手教程 【免费下载链接】layerdivider A tool to divide a single illustration into a layered structure. 项目地址: https://gitcode.com/gh_mirrors/la/layerdivider 还在为复杂的图像分层工作而烦恼…

探索基因组比对新维度:Cactus项目深度解析

探索基因组比对新维度&#xff1a;Cactus项目深度解析 【免费下载链接】cactus Official home of genome aligner based upon notion of Cactus graphs 项目地址: https://gitcode.com/gh_mirrors/cact/cactus 项目核心特性揭秘 Cactus项目作为基因组比对领域的重要工具…

Live2D AI动画革命:零代码打造智能虚拟助手全攻略

Live2D AI动画革命&#xff1a;零代码打造智能虚拟助手全攻略 【免费下载链接】live2d_ai 基于live2d.js实现的动画小人ai&#xff0c;拥有聊天功能&#xff0c;还有图片识别功能&#xff0c;可以嵌入到网页里 项目地址: https://gitcode.com/gh_mirrors/li/live2d_ai 在…

学习笔记——进程控制函数

进程控制函数整理笔记一、 进程回收函数wait() - 阻塞回收#include <sys/wait.h> pid_t wait(int *status);功能&#xff1a;阻塞等待任意子进程退出并回收状态&#xff08;只能父进程回收子进程&#xff09;参数&#xff1a;status&#xff1a;进程退出时的状态不关心退…

NIPAP终极指南:免费开源的IP地址管理系统快速上手

NIPAP终极指南&#xff1a;免费开源的IP地址管理系统快速上手 【免费下载链接】NIPAP Neat IP Address Planner - NIPAP is the best open source IPAM in the known universe, challenging classical IP address management (IPAM) systems in many areas. 项目地址: https:…

AutoGPT实战应用:让AI自主完成复杂任务的全流程解析

AutoGPT实战应用&#xff1a;让AI自主完成复杂任务的全流程解析 在信息爆炸的时代&#xff0c;我们每天面对的任务越来越复杂——从撰写一份详尽的市场分析报告&#xff0c;到为孩子制定个性化的学习计划&#xff0c;再到快速生成可运行的代码原型。传统的AI助手虽然能回答问题…

Git下载Stable Diffusion 3.5 FP8源码后如何正确加载FP8权重?

Git下载Stable Diffusion 3.5 FP8源码后如何正确加载FP8权重&#xff1f; 在生成式AI飞速发展的今天&#xff0c;图像生成模型的性能边界不断被刷新。然而&#xff0c;随着模型规模的增长&#xff0c;推理成本、显存占用和部署门槛也急剧上升。面对这一挑战&#xff0c;Stabili…

探索三相光储充变流器的奇妙世界

三相光储充变流器&#xff0c;双路MPPT输入&#xff0c;MPPT工作范围150-1100V,THD值小于3%&#xff0c;功率因数在-0.8-0.8之间&#xff0c;支持50Hz /60Hz&#xff0c;最大并网功率为三相10kw&#xff0c;电网电压范围为300-476VAC&#xff0c;支持锂电池的工作电压范围 90-5…

三菱FX5U与台达DT330温控器通讯及控制实现

三菱FX5U与台达DT330温控器通讯程序输出控制本体远程双设定(SL5U-12) 功能&#xff1a;通过三菱FX5U本体485口&#xff0c;结合触摸屏网口&#xff0c;实现对台达DT330温控器设定温度&#xff0c;读取温度&#xff0c;控制输出启停&#xff0c;以及在温控器本体与远程触摸屏都能…

夸克网盘自动化管理终极指南:从零开始构建智能签到系统

夸克网盘自动化管理终极指南&#xff1a;从零开始构建智能签到系统 【免费下载链接】quark-auto-save 夸克网盘签到、自动转存、命名整理、发推送提醒和刷新媒体库一条龙 项目地址: https://gitcode.com/gh_mirrors/qu/quark-auto-save 想要彻底解放双手&#xff0c;让夸…