周末被 maven-mvnd 刷屏了,于是我也下载了一个 mvnd 体验了一把。尽管测试的数据都是基于我本地我的项目,不具备普适性和权威性,但也足以阐明问题。它的测试后果远远超出我的预期,上面一起来看。
什么是 mvnd?
mvnd 是 Maven Daemon 的缩写,翻译成中文就是 Maven 守护过程。
mvnd 是 apache/maven 的一个子项目,它并不是一个全新的构建工具,而是对 maven 的扩大。它内置了 maven,其实现原理是构建了一个或者多个 maven 守护过程来执行构建服务。
mvnd 概述
1.mvnd 的指标是应用 Gradle 和 Takari 所知的技术提供更快的 Maven 构建。
Gradle 是一个基于 Apache Ant 和 Apache Maven 概念的我的项目自动化建构工具。Gradle 构建脚本应用的是 Groovy 或 Kotlin 的特定畛域语言来编写的,而不是传统的 XML。Gradle 最大的劣势就是比传统的 Maven 构建速度更快。
Takari 是 maven-wrapper 外围,大部分的开源我的项目都是提供 warpper 不便用户不装置 maven 的前提下疾速构建我的项目的。
2.mvnd 内嵌了 Maven,所以不须要独自装置 Maven 了。
3. 一个守护过程实例能够服务于来自 mvnd 客户端的多个间断申请。
4.mvnd 客户端应用 GraalVM 构建本地可执行文件,与启动传统 JVM 相比,它启动得更快,占用的内存更少。
5. 如果 mvnd 没有闲暇守护过程来服务一个构建申请,能够并行地生成多个守护过程。
mvnd 长处介绍
mvnd 具备以下长处:
- 用于运行构建的 JVM 不须要每次构建都重新启动。
- 持有 Maven 插件类的类加载器在多个构建中会被缓存。因而,插件 jar 文件只被读取和解析一次。(快照版本的 Maven 插件不会被缓存)
-
JVM 中即时 (JIT) 编译器生成的本地代码也被保留,与惯例 Maven 相比,JIT 编译所破费的工夫更少。在反复构建期间,JIT 优化的代码立刻可用,这不仅实用于来自 Maven 插件和 Maven Core 的代码,也实用于所有来自 JDK 自身的代码。
mvnd 装置
mvnd 反对 Window、Linux、Macos,本文以 Windows 装置为例。
1. 下载并解压 mvnd
下载地址:https://github.com/apache/maven-mvnd/releases
抉择最新版的 Windows 资源包,如下图所示:
下载实现之后,解压到本地的某个目录,如下图所示:
2. 配置环境变量
将 mvnd 解码包的执行目录 bin 配置到零碎变量 path 中,操作步骤如下图所示:
3. 测试 mvnd 装置
接下来关上命令行窗口,应用“mvnd -version”检查一下 mvnd 是否失常装置胜利,如下图所示:
如果打印了相干的版本信息就阐明装置胜利了。
mvn VS mvnd 性能测试
接下来就是本文的重头戏了,应用我本地的一个我的项目来测试一下 mvn 和 mvnd 的性能差距。
我的电脑配置如下:
1.mvn 性能测试
传统的 maven 执行后果如下图所示:
打包我本地的一个我的项目,跳过单元测试。
mvn 性能测试后果:1.312 秒。
2.mvnd 性能测试
mvnd 性能测试后果 0.154 秒。
总结
本文介绍了 mvnd,一个内置了 maven 但执行效率远比 maven 快很多的工具。它的上手难度很低,对于用户来说,只是将之前 maven 命令的结尾从“mvn”换成了“mvnd”而已。
mvnd 构建了一个或者多个 maven 守护过程,应用了全新的 VM 引擎,并增加了缓存及 JIT 优化,从而大大的进步了 maven 我的项目的构建速度,也让咱们看到了一个能与 Gradle 一较高下的心愿,我会继续关注此我的项目,心愿它倒退的越来越好。
参考资料:https://github.com/apache/maven-mvnd
是非审之于己,毁誉听之于人,得失安之于数。
公众号:Java 面试真题解析