更快的 Maven 来了!性能提升 300%!
The following article is from 码农小胖哥 Author 码农小胖哥
Maven经常被拿来和Gradle做对比,最大的劣势之一就是Maven构建慢,Gradle比Maven构建速度快2到10倍,而如今Maven也可以更快了。Apache Maven团队从Gradle和Takari(Maven生命周期优化器)[1]中获得灵感对Maven进行了强化,衍生出 maven-mvnd[2]项目。
如果你对Gradle比较感兴趣的话,不妨看下这篇文章:《Gradle真能干掉Maven?今天体验了一把,贼爽!》
简单介绍
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
来查看完整的命令选项清单。
说实话并行构建就是快,简直坐火箭一般。另外,控制台输出也优化了。
由于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
微信8.0将好友放开到了一万,小伙伴可以加我大号了,先到先得,再满就真没了
扫描下方二维码即可加我微信啦,2021,抱团取暖,一起牛逼。
推荐阅读
豆瓣 9.7!这本技术书籍直接封神了! 选择降薪 45%,从互联网回到国企! 干掉Visio!这个画图神器真的绝了!!! 这些年我用过的API文档工具,个个是精品! 为啥人家的命令行终端如此炫酷?原来用了这款137K+Star的神器! 再见 Xshell !这款开源的终端工具逼格更高! 40K+Star!Mall电商实战项目开源回忆录! mall-swarm 微服务电商项目发布重大更新,打造Spring Cloud最佳实践!