# Maven 推出强化项目:maven-mvnd
返回:maven | https://github.com/apache/maven-mvnd/
maven-mvnd
Maven 经常被拿来和 Gradle 做对比,最大的劣势之一就是 Maven 构建慢,Gradle 比 Maven 构建速度快 2 到 10 倍,而如今 Maven 也可以更快了。Apache Maven 团队从 Gradle 和 Takari(Maven 生命周期优化器)中获得灵感对 Maven 进行了强化,衍生出 maven-mvnd 项目。
mvnd 并不是对 Maven 进行了重构,而是内置了 Maven。它实际上是一个或者多个 Maven 守护进程,用来执行实际的构建服务。一个守护进程实例可以为来自 mvnd 客户端的多个连续请求提供 Maven 构建服务。当没有空闲的守护进程时来支撑构建请求时,mvnd 可以并行生成多个守护程序。
# 使用 GraalVM 代替 JVM
mvnd 之所以快是因为它使用了 GraalVM 替代了传统的 JVM,因此它启动更快,占用内存更少,而且在实行构建时不需要为每个构建启动新的 JVM。另外 Maven 插件在构建时不再需要多次加载,而是缓存在多个构建中。SNAPSHOT 版本的 Maven 插件不会被缓存。
# 支持 JIT
GraalVM 的 JIT(Just In Time)实时编译特性也被运用到 Maven 构建作业中。JIT 可以大大降低编译时间,在重复构建过程中,JIT 优化代码立即可用,也极大提高了构建效率。
# 并行构建
目前 Maven 3 的并行构建(parallel builds)还是实验特性,而且要求使用的插件必须是线程安全的。而 mvnd 默认就支持使用多个 CPU 内核进行并行构建。当然如果你的源代码不支持并行构建,也可以通过添加- T1 参数切换到串行构建。
# 安装
目前 mvnd 已经支持 Linux、MacOS、Windows 平台。你可以分别通过 SDKMAN、Homebrew、Chocolatey 这些包管理器进行安装。也可以直接去 mvnd 发行版仓库下载对应的二进制进行安装。这里以 Windows 为例
# 配置
配置很简单,只需要注意两点
- 如果不使用包管理器进行安装的话请
确保mvnd的bin目录关联到PATH。 - 如果没有配置或者不想配置 JAVA_HOME 环境变量的话请在~/.m2/mvnd.properties 中设置 java.home 以指定 Java 目录,例如:
java.home=C:\\AdoptOpenJDK\\jdk-8。已经配置环境变量的请忽略该条。
其它的配置项可参考https://github.com/apache/maven-mvnd/blob/master/dist/src/main/distro/conf/mvnd.properties
# 使用
安装配置完毕后命令行执行 mvnd --version 出现下列结果就表示安装成功了。

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