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

maven构建加速,maven哪个版本最好用

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

简单介绍

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

接下来简单尝试一下mvnd。

安装

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

choco install mvndaemon

时间可能比较长一些。

配置

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

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

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

使用

安装配置完毕后命令行执行 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来查看完整的命令选项清单。

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

maven构建加速,maven哪个版本最好用

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

参考资料

  • [1]Takari(Maven生命周期优化器): http://takari.io/book/40-lifecycle.html
  • [2]maven-mvnd: https://github.com/apache/maven-mvnd
  • [3]mvnd发行版仓库: https://github.com/mvndaemon/mvnd/releases
  • [4]mvnd配置: https://github.com/mvndaemon/mvnd/blob/master/dist/src/main/distro/conf/mvnd.properties

文章来源于码农小胖哥 ,作者码农小胖哥个人博客:https://felord.cn