共计 1591 个字符,预计需要花费 4 分钟才能阅读完成。
周末被 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 面试真题解析