微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

更快的Maven来了,我的天,速度提升了8倍!

更快的Maven来了,我的天,速度提升了8倍!

码农架构 2022-01-11 14:06  

以下文章来源于Java中文社群 ,作者磊哥

Java中文社群.

持续提供有用、有深度的Java干货文章

 

 

 

@H_404_20@周末被 maven-mvnd 刷屏了,于是我也下载了一个 mvnd 体验了一把。虽然测试的数据都是基于我本地项目,不具备普适性和权威性,但也足以说明问题。它的测试结果远远超出我的预期,下面一起来看。

什么是 mvnd?

@H_404_20@mvnd 是 Maven Daemon 的缩写 ,翻译成中文就是 Maven 守护进程。

@H_404_20@mvnd 是 apache/maven 的一个子项目,它并不是一个全新的构建工具,而是对 maven 的扩展。它内置了 maven,其实现原理是构建了一个或者多个 maven 守护进程来执行构建服务。

mvnd 概述

@H_404_20@1.mvnd 的目标是使用 Gradle 和 Takari 所知的技术提供更快的 Maven 构建。

@H_404_20@Gradle 是一个基于 Apache Ant 和 Apache Maven 概念的项目自动化建构工具。Gradle 构建脚本使用的是 Groovy 或 Kotlin 的特定领域语言来编写的,而不是传统的 XML。Gradle 最大的优势就是比传统的 Maven 构建速度更快。Takari 是 maven-wrapper 核心,大部分的开源项目都是提供 warpper 方便用户不安装 maven 的前提下快速构建项目的。

@H_404_20@2.mvnd 内嵌了 Maven,所以不需要单独安装 Maven 了。

@H_404_20@3.一个守护进程实例可以服务于来自 mvnd 客户端的多个连续请求。 

@H_404_20@4.mvnd 客户端使用 GraalVM 构建本地可执行文件,与启动传统 JVM 相比,它启动得更快,占用的内存更少。 

@H_404_20@5.如果 mvnd 没有空闲守护进程来服务一个构建请求,可以并行地生成多个守护进程。

mvnd 优点介绍

@H_404_20@mvnd 具有以下优点:

  1. 用于运行构建的 JVM 不需要每次构建都重新启动。
  2. 持有 Maven 插件类的类加载器在多个构建中会被缓存。因此,插件 jar 文件只被读取和解析一次。(快照版本的 Maven 插件不会被缓存)
  3. JVM 中即时(JIT)编译器生成的本地代码也被保留,与常规 Maven 相比,JIT 编译所花费的时间更少。在重复构建期间,JIT 优化的代码立即可用,这不仅适用于来自 Maven 插件和 Maven Core的代码,也适用于所有来自 JDK 本身的代码

mvnd 安装

@H_404_20@mvnd 支持 Window、Linux、Macos,本文以 Windows 安装为例。

1.下载并解压 mvnd

@H_404_20@下载地址:https://github.com/apache/maven-mvnd/releases选择最新版的 Windows 资源包,如下图所示:

 

 

@H_404_20@下载完成之后,解压到本地的某个目录,如下图所示:

@H_404_20@

 

 

2.配置环境变量

@H_404_20@将 mvnd 解码包的执行目录 bin 配置到系统变量 path 中,操作步骤如下图所示:

@H_404_20@

 

 

 

3.测试 mvnd 安装

@H_404_20@接下来打开命令行窗口,使用“mvnd -version”检查一下 mvnd 是否正常安装成功,如下图所示:

@H_404_20@

 

 

@H_404_20@如果打印了相关的版本信息就说明安装成功了。

mvn VS mvnd 性能测试

@H_404_20@接下来就是本文的重头戏了,使用我本地的一个项目来测试一下 mvn 和 mvnd 的性能差距。

@H_404_20@我的电脑配置如下:

@H_404_20@

 

 

1.mvn 性能测试

@H_404_20@传统的 maven 执行结果如下图所示:

@H_404_20@

 

 

打包我本地的一个项目,跳过单元测试。

@H_404_20@mvn 性能测试结果:1.312 秒。

2.mvnd 性能测试

 

 


@H_404_20@mvnd 性能测试结果 0.154 秒。

总结

@H_404_20@本文介绍了 mvnd,一个内置了 maven 但执行效率远比 maven 快很多的工具。它的上手难度很低,对于用户来说,只是将之前 maven 命令的开头从“mvn”换成了“mvnd”而已。

@H_404_20@mvnd 构建了一个或者多个 maven 守护进程,使用了全新的 VM 引擎,并添加了缓存及 JIT 优化,从而大大的提高了 maven 项目的构建速度,也让我们看到了一个能与 Gradle 一较高下的希望,我会持续关注此项目,希望它发展的越来越好。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐