更快的Maven (mvnd)

2,630 阅读3分钟

对于Java开发者而言,Maven和Gradle是使用的比较多的两个打包构建项目的工具。以前使用Java后端开发使用Maven的比较多,安卓开发使用Gradle。这两年Gradle开始慢慢的蚕食Maven。随着Spring-Boot项目由Maven迁移到了Gradle。Apache Maven团队从Gradle和Takari(Maven生命周期优化器)中获得灵感对Maven进行了强化,衍生出 maven-mvnd项目

简介

mvnd并不是对Maven进行了重构,而是内置了Maven。它实际上是一个或者多个Maven守护进程,用来执行实际的构建服务。一个守护进程实例可以为来自mvnd客户端的多个连续请求提供Maven构建服务。当没有空闲的守护进程时来支撑构建请求时,mvnd可以并行生成多个守护程序。

使用GraalVM代替JVM

mvnd之所以快是因为它使用了GraalVM替代了传统的JVM,因此它启动更快,占用内存更少,而且在实行构建时不需要为每个构建启动新的JVM。另外Maven插件在构建时不再需要多次加载,而是缓存在多个构建中。GraalVM的JIT(Just In Time)实时编译特性也被运用到Maven构建作业中。JIT可以大大降低编译时间,在重复构建过程中,JIT优化代码立即可用,也极大提高了构建效率。

安装使用

目前mvnd已经支持LinuxMacOSWindows平台。你可以分别通过SDKMANHomebrewChocolatey这些包管理器进行安装。也可以直接去mvnd发行版仓库下载对应的二进制进行安装。这里以Windows为例,直接下载二进制压缩包mvnd-0.7.1-windows-amd64.zip

配置

配置很简单,和普通maven配置一样

  • 配置环境变量将,bin目录关联到PATH

使用

安装配置完毕后命令行执行mvnd --version出现下列结果就表示安装成功了。

C:\Users\feng>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:\mvnd-0.7.1-windows-amd64\mvn
Java version: 17.0.1, vendor: GraalVM Community, runtime: D:\graalvm-ce-java17-21.3.0
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

为了降低学习成本mvnd的方式和传统Maven类似,mvn变成了mvnd,你也可以通过mvnd --help来查看完整的命令选项清单。

使用f-boot进行构建

  1. mvn
mvn -DskipTest=true clean install

[INFO] Reactor Summary for f-boot 1.0.0:
[INFO] 
[INFO] f-boot ............................................. SUCCESS [  1.215 s]
[INFO] api ................................................ SUCCESS [  3.179 s]
[INFO] common ............................................. SUCCESS [  2.403 s]
[INFO] service ............................................ SUCCESS [  1.263 s]
[INFO] web ................................................ SUCCESS [  2.580 s]
[INFO] generator .......................................... SUCCESS [  0.842 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  11.702 s

  1. mvnd
mvnd -DskipTest=true clean install -Dquickly
[INFO] Reactor Summary for f-boot 1.0.0:
[INFO]
[INFO] f-boot ............................................. SUCCESS [  0.045 s]
[INFO] api ................................................ SUCCESS [  1.105 s]
[INFO] common ............................................. SUCCESS [  1.866 s]
[INFO] service ............................................ SUCCESS [  0.564 s]
[INFO] web ................................................ SUCCESS [  1.235 s]
[INFO] generator .......................................... SUCCESS [  0.533 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  5.370 s (Wall Clock)

结果

从打包结果来看mvnd的速度还是可用的。但是现在这个项目估计还在测试阶段和发展阶段。后续还需要开发工具的支持等等。可以观望一下,自己还是可用在本地安装使用的。

参考

# 更快的Maven来了

# github