欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

[工具系列] mvnd:提高性能的 maven 新构建插件

最编程 2024-07-18 13:45:07
...

前言:

早上打包项目的时候发现打包速度很慢,耗时颇久,就在一个群里求助,如何使maven打包效率加快,一个群友发来一个链接,如图。

Google后发现这个工具居然是apache maven团队出品,并且是maven的一个子项目,所以使用maven可以无缝切换到mvnd

Mvnd 简介

maven-mvndApache Maven团队借鉴了GradleTakari后衍生出的更快的构建工具。mvnd内嵌了Maven,也正是因为这个原因我们可以无缝地将Maven切换为mvnd(也不需要单独安装Maven)。

在设计上,在mvnd中会生成一个或多个的守护进程来服务构建请求以此来达到并行构建的效果。另外在VM的选择上,mvnd使用了GraalVM来代替传统的JVM,与之相比GraalVM启动速度更快,占用的内存更少。

根据文档描述,与传统的Maven相比mvnd具有以下优势:

  • 运行构建的JVM不需要为每个构建重新启动。
  • Maven插件类的类加载器缓存在多个构建中,插件jars只会被读取和解析一次。
  • JVMJIT生成的本机代码会被保留。与Maven相比,JIT编译花费的时间更少。在重复构建期间,JIT优化的代码立即可用。这不仅适用于来自Maven插件和Maven内核的代码,也适用于来自JDK本身的所有代码。

默认情况下,mvnd使用多个CPU内核并行构建模块。使用的内核数由公式Math.max(Runtime.getRuntime().availableProcessors() - 1, 1)给出。 如果您的源代码树不支持并行构建,请在命令行上传递-T1以使您的构建串行。

  • 同时官方给出了24核机器上运行的动态图:

Github地址:传送门

安装

  • 下载地址:传送门

最新版本是0.7.1;

  • 下载完成后解压即安装
  • 修改配置文件

在解压后根目录的conf文件夹下找到mvnd.properties配置文件,配置maven.settings属性值为maven配置文件settings.xml的文件路径。注意:此settings.xml文件存放位置不受限制。

  • 配置环境变量

复制bin目录路径,打开系统设置,最新版本win10 在系统/关于/高级系统设置/环境变量(N)...下配置系统环境变量

确认返回即可。

测试

  • 查看环境变量是否配置成功
D:\>mvnd -version
mvnd native client 0.7.1-windows-amd64 (97c587c11383a67b5bd0ff8388bd94c694b91c1e)
Terminal: org.jline.terminal.impl.jansi.win.JansiWinSysTerminal
[WARN]
[WARN] Some problems were encountered while building the effective settings
[WARN] Unrecognised tag: 'url' (position: START_TAG seen ...<!-- \u914d\u7f6e JDK \u7248\u672c -->\r\n        <url>... @307:14)  @ D:\APP\apache-maven-3.8.2\conf\settings.xml, line 307, column 14
[WARN]
Apache Maven 3.8.3 (ff8e977a158738155dc465c6a97ffaf31982d739)
Maven home: D:\APP\mvnd-0.7.1-windows-amd64\mvn
Java version: 1.8.0_281, vendor: Oracle Corporation, runtime: C:\Program Files\Java\jdk1.8.0_281\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
  • 查看帮助
$ mvnd --help
  • mvn 打包测试
# mvn 打包命令
mvn clean package -Dmaven.test.skip=true

# 执行结果
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  8.405 s
[INFO] Finished at: 2021-12-29T11:18:05+08:00
[INFO] ------------------------------------------------------------------------
  • mvnd 打包测试
# 执行打包命令
mvnd clean package -Dmaven.test.skip=true

# 执行结果
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  3.278 s (Wall Clock)
[INFO] Finished at: 2021-12-29T11:19:40+08:00
[INFO] ------------------------------------------------------------------------

差距很大,俺很惊喜????????????。如果你有更加不错的方案,可以在下方留言区讨论,共同学习进步。

推荐阅读