更快的 Maven 来了!!!性能提升 300%

JavaGuide

共 3010字,需浏览 7分钟

 · 2021-12-28

Maven 经常被拿来和 Gradle 做对比,最大的劣势之一就是 Maven 构建慢,Gradle 比 Maven 构建速度快 2 到 10 倍,而如今 Maven 也可以更快了。Apache Maven 团队从 Gradle 和 Takari(Maven 生命周期优化器)[1]中获得灵感对 Maven 进行了强化,衍生出 maven-mvnd 项目。

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

关于 Gradle 的介绍和使用,可以看这篇文章:说实话,用完Gradle之后,有点嫌弃Maven了。贼好用!

mvnd 介绍

mvnd 并不是对 Maven 进行了重构,而是内置了 Maven。它实际上是一个或者多个 Maven 守护进程,用来执行实际的构建服务。一个守护进程实例可以为来自 mvnd 客户端的多个连续请求提供 Maven 构建服务。当没有空闲的守护进程时来支撑构建请求时,mvnd 可以并行生成多个守护程序。

mvnd 的 Github 地址:https://github.com/apache/maven-mvnd 。

使用 GraalVM 代替 JVM

mvnd 之所以快是因为它使用了 GraalVM 替代了传统的 JVM ,因此它启动更快,占用内存更少,而且在实行构建时不需要为每个构建启动新的 JVM

另外,Maven 插件在构建时不再需要多次加载,而是缓存在多个构建中。SNAPSHOT 版本的 Maven 插件不会被缓存。

支持 JIT

GraalVMJIT(Just In Time)实时编译特性也被运用到 Maven 构建作业中。JIT 可以大大降低编译时间,在重复构建过程中,JIT 优化代码立即可用,也极大提高了构建效率。

并行构建

目前 Maven 3 的并行构建(parallel builds)还是实验特性,而且要求使用的插件必须是线程安全的。而 mvnd 默认就支持使用多个 CPU 内核进行并行构建。当然如果你的源代码不支持并行构建,也可以通过添加- T1 参数切换到串行构建。

简单尝试

接下来简单尝试一下 mvnd

安装

目前 mvnd 已经支持 LinuxMacOSWindows 平台。你可以分别通过 SDKMANHomebrewChocolatey 这些包管理器进行安装。

# MacOS
brew install mvndaemon/homebrew-mvnd/mvnd
# Windows
choco install mvndaemon
# Linux
sdk install mvnd

安装时间可能比较长一些,耐心等待即可。

除此之外,你也可以直接去 mvnd 发行版仓库[2] 下载对应的二进制进行安装,选择好对应的版本即可。

配置

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

  1. 如果不使用包管理器进行安装的话请确保 mvndbin目录关联到PATH
  2. 如果没有配置或者不想配置JAVA_HOME环境变量的话请在~/.m2/mvnd.properties中设置java.home以指定Java目录,例如:java.home=C:\\AdoptOpenJDK\\jdk-8。已经配置环境变量的请忽略该条。

其它的配置项可参考 mvnd 配置[3]

使用

安装配置完毕后命令行执行mvnd --version出现下列结果就表示安装成功了。

mvnd --version
mvnd native client 0.7.1-windows-amd64 (97c587c11383a67b5bd0ff8388bd94c694b91c1e)
Terminal: org.jline.terminal.impl.jansi.win.JansiWinSysTerminal
Apache Maven 3.8.3 (ff8e977a158738155dc465c6a97ffaf31982d739)
Maven home: C:\Program Files\mvndaemon\mvnd-0.7.1-windows-amd64\mvn
Java version: 1.8.0_282, vendor: AdoptOpenJDK, runtime: C:\Program Files\AdoptOpenJDK\jdk-8.0.282.8-hotspot\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

为了降低学习成本 mvnd 的方式和传统 Maven 类似,mvn变成了mvnd,你也可以通过mvnd --help来查看完整的命令选项清单。

说实话并行构建就是快,简直坐火箭一般。另外,控制台输出也优化了。

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

参考资料

[1]

Takari(Maven 生命周期优化器): http://takari.io/book/40-lifecycle.html

[2]

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

[3]

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


··········  END  ··············

也许你还想看
  | 换掉 Postman + Swagger + JMeter,这 5 个 Java 项目绝了!
  | 官宣!我升级了!!!
  | 这样使用 IDEA ,效率提升10倍!| IDEA 高效使用指南
  | 豆瓣 9.7!这本技术书籍直接封神了
  | 阿里开源的15个顶级Java项目!!!
  | 面试八股文,YYDS!

我是 Guide哥,一个工作2年有余,接触编程已经6年有余的菜鸟。大三开源 JavaGuide,目前已经 100k+ Star。未来几年,希望持续完善 JavaGuide,争取能够帮助更多学习 Java 的小伙伴!共勉!凎!点击即可了解我的个人经历

简历指导/Java 学习/面试指导/面试小册,欢迎加入我的知识星球(公众号后台回复“星球”即可)。

如果本文对你有帮助的话,欢迎点赞&在看&分享,这对我继续分享&创作优质文章非常重要。感谢🙏🏻

浏览 15
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报