maven-mvnd 让打包更快

猎隼丶止戈 猎隼丶止戈 | 133 | 2022-09-15

前言

众所周知,MavenGradle 几乎包含了所有Java项目的构建。而目前绝大部分的 Java 项目都是使用 Maven 的方式,Maven 对比 Gradle 的 劣势很明显 ,就是太慢了

相信作为 Java 开发者的你早已经受够了 maven 的编译缓慢,但是又由于历史包袱、使用习惯等问题暂时切换不了其他更快的构建工具。但是现在,Maven 也可以变得更快了!

这里将给你介绍一款更快的 maven —— maven-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官方链接

安装

对于 mvnd 的安装,官方文档给了十分详细的教程,建议先行阅读:手动安装

下载

GitHub 下载压缩包,选择 windows 版本(maven-mvnd-<最新版本>-windows-amd64.zip)如:maven-mvnd-0.8.0-windows-amd64.zip

ef4ef12e0957448d9b68a479b03ace21.png

配置

  1. 把下载的压缩包解压后,配置 其中 bin 目录地址到系统 path 环境变量中;

    • 添加变量名 MVND_HOME ,变量值为 maven-mvnd 解压安装位置。

      6b7368e1e83d4efcb16481c26a73972e.png

    • 添加 path 配置

      36a2f92f907d458693e23dd5305dcbd7.png

  2. 配置环境变量是为了在 cmd 的任意地址,可以识别到 bin 下的 mvnd 命令;

  3. 配置完成,输入 mvnd -version 查看版本信息;

    mvnd -version
    
    C:\WINDOWS\system32>mvnd -version
    mvnd native client 0.7.1-windows-amd64 (97c587c11383a67b5bd0ff8388bd94c694b91c1e)
    Terminal: org.jline.terminal.impl.jansi.win.JansiWinSysTerminal
    Apache Maven 3.8.3 (ff8e977a158738155dc465c6a97ffaf31982d739)
    Maven home: D:\Code\mvnd-0.7.1-windows-amd64\mvn
    Java version: 1.8.0_102, vendor: Oracle Corporation, runtime: D:\JAVA\jdk\jre
    Default locale: zh_CN, platform encoding: GBK
    OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
    

使用

配置

可以修改 %MVND_HOME%/conf 下的 mvnd.properties 配置文件,拉到最后面,放开 maven.setting 注释,把值改成自己的 maven配置 ( settings.xml )。或者,您可以设置 java.home 属性,以防使用不是您想要的 JAVA_HOME 环境变量来运行。

举例:

  • mvnd.properties mvnd配置文件路径:D:\mvnd-0.8.0\conf\mvnd.properties
  • settings.xml maven 配置文件路径:D:\mvnd-0.8.0\mvn\conf\settings.xml

58e14363b9ac48d88e810e15fa17ca32.png

命令

在使用上与 Maven 的用法几乎没有任何不同,只需将命令 mvn 改为 mvnd 即可。也可以通过查看 mvnd -help 查看使用方法。

举个例子,如要打包安装:

# maven 方式
mvn clean install

# mvnd 方式
mvnd clean install

在本机的实测中,与传统的 Maven 相比,通过 mvnd 的构建所耗费的时间是原来的 1/2

eb7700065670402c83e940c50aa83608.png

IntelliJ IDEA 配置

  • 需要安装 Maven Helper 插件
  • 打包时配置跳过测试 -Dmaven.test.skip=true
  • Terminal 显示未找到 mvnd 命令,请尝试重启 IntelliJ IDEA 或 电脑。
  1. Maven Helper 配置

    f2a07595ed2f40e0b50cf3767cc03fe2.png

  2. 将 Terminal 配置为 cmder

    下载地址 cmder(GitHub),并在 高级系统设置 -> 环境变量 配置 2 个参数: CMDER_HOME=E:\Program Files\cmderpath=省略其他配置...;E:\Program Files\cmder;

    # 若要将 cmder 添加到右键菜单,在 运行命令窗口 中执行如下脚本
    Cmder.exe /REGISTER ALL
    

    d0390fc10c644c2f859c5097c4d9767f.png

文章标签: 编译打包
推荐指数:

真诚点赞 诚不我欺~

maven-mvnd 让打包更快

点赞 收藏 评论

关于作者

猎隼丶止戈
猎隼丶止戈

这个人很懒~

等级 LV2

粉丝 8

获赞 24

经验 201