与优秀的人在一起,自己也会优秀起来,点击加群

Maven经常被拿来和Gradle做对比,最大的劣势之一就是Maven构建慢,GradleMaven构建速度快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

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

并行构建

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

简单尝试

接下来简单尝试一下mvnd

安装

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

choco install mvndaemon

时间可能比较长一些。

配置

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

  • 如果不使用包管理器进行安装的话请确保mvndbin目录关联到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官方的进一步动作。

阿里大佬的《LeetCode刷题答案》PDF新鲜出炉

年末面试必备!点击直接领取吧‍

参考资料

[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

了解行业热点、探索技术前沿

技术人的弯道超车从关注程序猿DD开始

点击阅读原文,送你免费Spring Boot教程!

Maven推出强化项目:maven-mvnd,构建速度大幅提升!相关推荐

  1. maven 多模块项目:单独构建某个模块

    前言 maven 3.5.0 在maven 多模块项目中,使用-pl -am -amd等参数可以单独构建某个模块. maven 多模块项目关系 单独构建模块:module1 在父级项目目录中执行如下命 ...

  2. 修改 Android Studio 相关模板,以加快项目创建时构建速度,支持Mac,Windows,Linux...

    2019独角兽企业重金招聘Python工程师标准>>> 注: 本文主要在Mac中操作,Windows,Linux操作类似.默认创建Empty Activity项目 Android S ...

  3. maven 一个简单项目 —— maven权威指南学习笔记(三)

    目标: 对构建生命周期 (build  lifecycle),Maven仓库 (repositories),依赖管理 (dependency management)和项目对象模型 (Project O ...

  4. Maven学习总结(57)—— 如何提高 Maven 的构建速度?maven-mvnd 又是什么鬼?

    前言 Maven 经常被拿来和 Gradle 做对比,最大的劣势之一就是 Maven 构建慢,Gradle 比 Maven 构建速度快 2 到 10 倍,而如今 Maven 也可以更快了.Apache ...

  5. Maven(一):安装与环境配置、使用Maven搭建web项目

    相关阅读: Maven(一):安装与环境配置.使用Maven搭建web项目 Maven(二):常用命令.依赖管理 Maven(三):将web项目的war包热部署到远程Tomcat服务器 Maven(四 ...

  6. maven多模块项目,多web合并项目使用心得

    Fixflow,做中国最好的开源流程引擎!项目地址https://github.com/fixteam/fixflow 此文章适合maven初学者或想接触maven的用户,讲的只是皮毛,高手请自觉略过 ...

  7. linux下eclipse开发storm,eclipse 通过maven 开发storm项目

    window系统安装java 这里下载jdk8....... 配置环境变量 1.安装完成后,右击"我的电脑",点击"属性",选择"高级系统设置&quo ...

  8. Maven学习总结(一)——Maven入门

    2019独角兽企业重金招聘Python工程师标准>>> Maven学习总结(一)--Maven入门 一.Maven的基本概念 Maven(翻译为"专家",&quo ...

  9. 【maven】最全Maven详解,看这一篇就够啦

    文章目录 一.引言 1.1 项目管理问题 1.1.1 繁琐 1.1.2 复杂 1.1.3 冗余 1.2 项目管理方案 二.介绍 三.Maven安装 3.1 下载Maven 3.2 Maven安装 3. ...

最新文章

  1. java内存模型-JMM
  2. 想懂量子力学?让你养的猫教你
  3. C# default關鍵字
  4. 对于反射的一些总结(一)
  5. jsp开发环境的搭建
  6. linux 打包库文件,Linux的文件的打包(tar方法)
  7. Thread.SetData与ThreadStatic
  8. 指令篇:文件的创建和时间修改___touch
  9. 计算机组成原理白中英课后习题题答案
  10. 制作lfw格式的数据集
  11. 计算机自带扫雷游戏玩不了,Win7 32位系统扫雷游戏打不开如何解决【图文教程】...
  12. mysql免安装部署_MySQL免安装版配置部署
  13. 计算机重启 ie 被改,ie被修改怎么办 ie被修改的解决方法【详解】
  14. 【愚公系列】2022年10月 .Net Core使用cpolar内网穿透功能实现钉钉回调事件的监听
  15. 关于Excel自定义TEXTJOIN函数、SWITCH函数
  16. pyqt5 PDM下载工具 Persepolis Download Manager 记录
  17. 图解Linux命令之--modprobe命令
  18. QQ登录+分享+空间分享
  19. openid会变吗?微信小程序开发中的appid、openid、unionid使用总结
  20. 8.2-无监督学习-线性降维

热门文章

  1. SQL Server 监控系列(文章索引)
  2. mysql自动备份脚本,及系统定时备份设置!
  3. Google Maps Android API V2使用及问题解决
  4. java rmi 原理和使用浅析
  5. docker 报错 /usr/bin/docker-current: Error response from daemon: driver failed programming external
  6. NTP时间服务器简介
  7. shell脚本调试工具 bashdb
  8. Android开发--FileInputStream/OutStream/Sdcard写入
  9. Linux系统调用中的参数验证
  10. Android 中 JUnit 测试的配置