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

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

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.


责任编辑:庞桂玉 来源: 移动Labs
相关推荐

2023-07-23 18:47:59

Docker开源

2023-07-16 18:49:42

HTTP网络

2023-04-15 20:25:23

微前端

2023-07-02 16:09:57

人工智能人脸识别

2023-07-02 16:34:06

GPU虚拟化深度学习

2023-07-12 15:50:29

机器学习人工智能

2023-09-12 07:10:13

Nacos架构

2023-08-15 14:46:03

2023-07-31 08:55:15

AI技术网络暴力

2024-12-18 14:10:33

2023-07-12 16:03:37

Android开发架构

2023-08-06 07:00:59

Openstack网络

2023-09-17 17:51:43

Android 14

2023-08-06 06:55:29

数字可视化物联网

2023-09-02 20:22:42

自动化测试软件开发

2021-09-18 11:36:38

混沌工程云原生故障

2023-06-03 21:06:05

2023-04-15 20:33:35

图形数据库数据库

2023-07-12 16:13:01

2023-08-07 06:35:07

系统限流
点赞
收藏

51CTO技术栈公众号