Maven常常被拿来和Gradle做比照,最大的劣势之一就是Maven构建慢,GradleMaven构建速度快2到10倍,而现在Maven也能够更快了。Apache Maven团队从Gradle和Takari(Maven生命周期优化器)中取得灵感对Maven进行了强化,衍生出 maven-mvnd我的项目,明天胖哥带你来尝尝鲜。

简略介绍

mvnd并不是对Maven进行了重构,而是内置了Maven。它实际上是一个或者多个Maven守护过程,用来执行理论的构建服务。一个守护过程实例能够为来自mvnd客户端的多个间断申请提供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这些包管理器进行装置。也能够间接去mvnd发行版仓库下载对应的二进制进行装置。这里以Windows为例,我抉择Chocolatey装置:

choco install mvndaemon

工夫可能比拟长一些。

配置

配置很简略,只须要留神两点

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

其它的配置项可参考mvnd配置。

应用

装置配置结束后命令行执行mvnd --version呈现下列后果就示意装置胜利了。

mvnd --versionmvnd native client 0.7.1-windows-amd64 (97c587c11383a67b5bd0ff8388bd94c694b91c1e)Terminal: org.jline.terminal.impl.jansi.win.JansiWinSysTerminalApache Maven 3.8.3 (ff8e977a158738155dc465c6a97ffaf31982d739)Maven home: C:\Program Files\mvndaemon\mvnd-0.7.1-windows-amd64\mvnJava version: 1.8.0_282, vendor: AdoptOpenJDK, runtime: C:\Program Files\AdoptOpenJDK\jdk-8.0.282.8-hotspot\jreDefault locale: zh_CN, platform encoding: GBKOS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

为了升高学习老本mvnd的形式和传统Maven相似,mvn变成了mvnd,你也能够通过mvnd --help来查看残缺的命令选项清单。

说实话并行构建就是快,几乎坐火箭个别。另外,控制台输入也优化了。

因为GraalVM的加持,这个工具很可能会缩短Maven的生命,防止过早被Gradle拉开劣势。对于咱们来说,这个我的项目能够张望一下,看看Apache Maven官网的进一步动作。

关注公众号:Felordcn 获取更多资讯

集体博客:https://felord.cn