概述
maven-mvnd,可简称(或缩写)mvnd,the Maven Daemon。Apache Maven团队借鉴Gradle和Takari后开发的更快的构建工具。mvnd内嵌Maven,开发者可无缝从Maven迁移到mvnd。
参考资料:GitHub。
mvnd中会启动一个或多个守护进程,用来执行实际的构建服务。一个守护进程实例可以为来自mvnd客户端的多个连续请求提供Maven构建服务。当没有空闲的守护进程时来支撑构建请求时,mvnd可以并行生成多个守护程序。
mvnd使用GraalVM代替传统的JVM,GraalVM启动速度更快,占用的内存更少,在实行构建时不需要为每个构建启动新的JVM。GraalVM的JIT(Just In Time)实时编译特性也被运用到Maven构建作业中。JIT可大大减少编译时间,在重复构建过程中,JIT优化代码立即可用,也极大提高构建效率。
另外Maven插件在构建时不再需要多次加载,而是缓存在多个构建中。SNAPSHOT版本的Maven插件不会被缓存。
默认情况下,mvnd使用多个CPU内核并行构建模块。使用的内核数公式Math.max(Runtime.getRuntime().availableProcessors() - 1, 1)
。如果代码不支持并行构建,在命令行添加-T1
参数切换到串行构建。
相比Maven,mvnd的优势:
- 运行构建的JVM不需要为每个构建重新启动;
- Maven插件类的类加载器缓存在多个构建中,插件jars只会被读取和解析一次;
- JVM中JIT生成的本机代码会被保留。与Maven相比,JIT编译花费的时间更少。在重复构建期间,JIT优化的代码立即可用。这不仅适用于来自Maven插件和Maven内核的代码,也适用于来自JDK本身的所有代码。
安装使用
下载地址,读者根据各自的操作系统选择。本文选择Windows系统1.0.1
版本,这里选择下载zip压缩包(另外还有tar.gz
压缩包)。解压缩后,将目录名maven-mvnd-1.0.1-windows-amd64
重命名为mvnd-1.0.1
。
目录如下:
进入到mvn目录下,发现和之前的Maven目录设置没有区别:
配置环境变量和之前使用Maven没有区别,过程略。与Maven的命令完全相同,改为mvnd即可:
mvnd与Maven互不干扰。
默认情况下,Maven下载的JAR包存放在C盘目录下,但C盘一般都是SSD,空间有限。于是会修改Maven的settings.xml
配置文件,将JAR包放到D盘:
<localRepository