五分钟技术趣谈 | mvnd:更快的maven来了

2023年 8月 29日 26.6k 0

Labs 导读

Maven和Gradle都是我们程序猿们日常开发必不可少的构建工具,但两者还是有很大的不同之处的:1.可扩展性,Gradle比较灵活,maven的灵活性就差一些,但是maven的项目比较容易看懂,并且上手简单;2.性能比较,Gradle比maven运行得快。Gradle无论是在可扩展性还是在性能方面都优于Maven。

相信作为Java开发者的你早已经受够了maven的编译缓慢,但是又由于历史包袱、使用习惯等问题暂时切换不了其他更快的构建工具,这里介绍一款更快的Maven——maven-mvnd[1]。

Part 01

介绍

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参数切换到串行构建。

Part 02

简单尝试

- 安装

目前mvnd已经支持Linux、MacOS、Windows平台。你可以分别通过SDKMAN、Homebrew、Chocolatey这些包管理器进行安装。也可以直接去mvnd发行版仓库[2]下载对应的二进制进行安装。这里以Windows为例,小编选择
从mvnd发行版仓库[2]下载压缩包,如下图所示:

图片图片

选择下载 maven-mvnd-1.0-m6-m40-windows-amd64.zip版本。

- 配置

配置很简单,只需要注意几点:

如果不使用包管理器进行安装的话请确保mvnd的bin目录关联到PATH。

解压后修改配置文件,修改conf/mvnd.properties。拉到底部修改settings文件目录,可以指向原安装maven中的xml文件,也可单独放到一个目录中。

图片图片

如果没有配置或者不想配置JAVA_HOME环境变量的话请在~/.m2/mvnd.properties中设置java.home以指定Java目录,例如:java.home=C:\AdoptOpenJDK\jdk-8。已经配置环境变量的请忽略该条。

其他配置可参考mvnd配置[3]。

- 验证

环境变量配置完成,在cmd的任意地址,可以识别到bin下的 mvnd 命令输入mvnd -version查看版本信息,输出如下信息代表安装成功!

图片图片

- 使用

在使用上与Maven的用法是完全相同的,只需将命令mvn改为mvnd即可。而在笔者本机的实测中,与传统的Maven相比,通过mvnd的构建所耗费的时间大约是原来的1/2。

  • maven构建

图片图片

  • mvnd构建(并行)

图片图片

  • mvnd构建(串行)

图片图片

Part 03

总结

由于GraalVM的加持,这个工具很可能会延长Maven的生命,避免过早被Gradle拉开优势。对于我们来说,这个项目可以观望一下,看看Apache
Maven官方的进一步动作。

👉参考文献

[1] maven-mvnd: https://github.com/apache/maven-mvnd.

[2] mvnd发行版仓库: https://github.com/mvndaemon/mvnd/releases.

[3] mvnd配置:
https://github.com/mvndaemon/mvnd/blob/master/dist/src/main/distro/conf/mvnd.properties.

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论