更快的 Maven 来了!!!性能提升 300%
欢迎关注方志朋的博客,回复”666“获面试宝典
Maven 经常被拿来和 Gradle 做对比,最大的劣势之一就是 Maven 构建慢,Gradle 比 Maven 构建速度快 2 到 10 倍,而如今 Maven 也可以更快了。Apache Maven 团队从 Gradle 和 Takari(Maven 生命周期优化器)[1]中获得灵感对 Maven 进行了强化,衍生出 maven-mvnd 项目。
Gradle 是一个基于 Apache Ant 和 Apache Maven 概念的项目自动化建构工具。Gradle 构建脚本使用的是 Groovy 或 Kotlin 的特定领域语言来编写的,而不是传统的 XML。
Takari 是 maven-wrapper 核心,大部分的开源项目都是提供 warpper 方便用户不安装 maven 的前提下快速构建。
mvnd 介绍
mvnd 并不是对 Maven 进行了重构,而是内置了 Maven。它实际上是一个或者多个 Maven 守护进程,用来执行实际的构建服务。一个守护进程实例可以为来自 mvnd 客户端的多个连续请求提供 Maven 构建服务。当没有空闲的守护进程时来支撑构建请求时,mvnd 可以并行生成多个守护程序。
mvnd 的 Github 地址:https://github.com/apache/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 这些包管理器进行安装。
# MacOS
brew install mvndaemon/homebrew-mvnd/mvnd
# Windows
choco install mvndaemon
# Linux
sdk install mvnd
安装时间可能比较长一些,耐心等待即可。
除此之外,你也可以直接去 mvnd 发行版仓库[2] 下载对应的二进制进行安装,选择好对应的版本即可。
配置
配置很简单,只需要注意两点
如果不使用包管理器进行安装的话请确保 mvnd 的
bin
目录关联到PATH
。如果没有配置或者不想配置
JAVA_HOME
环境变量的话请在~/.m2/mvnd.properties
中设置java.home
以指定Java目录,例如:java.home=C:\\AdoptOpenJDK\\jdk-8
。已经配置环境变量的请忽略该条。
其它的配置项可参考 mvnd 配置[3]。
使用
安装配置完毕后命令行执行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]
mvnd 发行版仓库: https://github.com/mvndaemon/mvnd/releases
[3]
mvnd 配置: https://github.com/mvndaemon/mvnd/blob/master/dist/src/main/distro/conf/mvnd.properties
热门内容:
Java 18 要来了,你不会还在用Java 8吧?
为什么不建议你用去 “! = null” 做判空?
阿里二面:main 方法可以继承吗?
离开互联网上岸1年后,我后悔了!重回大厂内卷
逃过大厂“开猿节流”,斩获12家offer,最牛笔记曝光!
最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。
获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。
明天见(。・ω・。)ノ♡
更快的 Maven 来了!!!性能提升 300%相关推荐
- 更快的Maven构建工具mvnd和Gradle哪个性能更好?
作者 | 磊哥 来源 | Java中文社群(ID:javacn666) 转载请联系授权(微信ID:GG_Stone) Maven 作为经典的项目构建工具相信很多人已经用很久了,但如果体验过 Gradl ...
- 更快的Maven来了,我的天,速度提升了8倍!
作者 | 王磊 来源 | Java中文社群(ID:javacn666) 转载请联系授权(微信ID:GG_Stone) 周末被 maven-mvnd 刷屏了,于是我也下载了一个 mvnd 体验了一把.虽 ...
- 如何使Windows 11更快以获得良好的性能
总结: 如果您已安装Windows 11并使用它一段时间,则可能会受到滞后问题的困扰.如何使Windows 11更快以获得良好的PC性能或如何使Windows 11启动更快? 视窗 11 滞后/缓慢 ...
- Java语言和C语言相比,为什么C语言的运算速度会更快,是因为vjm的性能不行么?
C语言编译出来的是机器码,程序执行过程是机器直接执行其机器码. Java语言程序执行过程是,Java虚拟机(jvm)翻译Java字节码,然后将其转换成机器码告知机器运行. 同时Java语言是自动管理内 ...
- 计算机运行的速度,如何让电脑运行更快(只需九招提升你的计算机运行速度)...
因为您提到CPU资本以及内存资本,包罗硬盘资本占用正常所以可以解除后台应用程序资本占用过多,造当作的运行程序卡顿环境也就解除了系统问题造当作的运行迟缓卡顿环境 在使用Windows 过程中,您是否觉得 ...
- 在毫秒量级上做到“更快”!DataTester 助力飞书提升页面秒开率
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 用户体验是决定互联网产品能否长久生存的基础,每一个基于产品功能.使用.外观的微小体验,都将极大关系到用户留存影响. ...
- 更快 Maven 来袭,性能大幅提升
点击"终码一生",关注,置顶公众号. 每日技术干货,第一时间送达! 相信作为Java开发者的你早已经受够了maven的编译缓慢,但是又由于历史包袱.使用习惯等问题暂时切换不了其他更 ...
- 更快 Maven 来袭,性能大幅提升!
相信作为Java开发者的你早已经受够了maven的编译缓慢,但是又由于历史包袱.使用习惯等问题暂时切换不了其他更快的构建工具,这里笔者将给你介绍一款更快的maven--maven-mvnd. 1 介绍 ...
- 即将取代Maven和Gradle的新一代更强更快的构建工具(至尊典藏版)
目录 前言 1.介绍 2.安装 3.使用 3.1. 从GitHub下载压缩包 3.2. 解压并配置环境变量 3.3.测试 4.总结 前言 大家好,我是程序缘--幻羽,我又来了!! Maven和Grad ...
最新文章
- 基于 eBPF 的 prometheus 监控方案
- 把一个质量为M0 的物体加速到 时间慢100倍 需要多大能量
- C++中基类的析构函数为什么要用virtual虚析构函数
- 独立于三大FPGA平台采用modelsim仿真
- 绕过CDN查找网站真实IP方法收集
- 企业内部网的IP解析问题
- “约见”面试官系列之常见面试题之第一百零三篇之vue-router实现路由懒加载(建议收藏)
- php opcache 详解
- 130242014037-汤毓聪-实验一
- c语言计算机编程例题详解,计算机C语言编写程序题及答案解析精选.doc
- thinkphp 模板页面出现空白
- php 什么情况下加异常,PHP中的异常
- Wine 1.5.15 发布
- numpy.linalg.eig() 计算方形矩阵的特征值和特征向量
- 使用tp5.1写api接口的流程
- 软件无线电波测试软件,SDR软件无线电的测量
- iis 无法启动计算机,win10系统iis无法启动的详细步骤
- 吴恩达机器学习中文版课后题(中文题目+数据集+python版答案)week2 逻辑回归
- 带数据库html5游戏教程,html5学习之旅-html5的简易数据库开发(18)-H5教程
- kafka zookeeper docker容器互联
热门文章
- 手机上有android,android-在不同智能手机上的Videoview行为(具有...
- Linux中V4L2使用
- 一起学WPF系列(2):第一个WPF应用程序
- 手机网页H5 自适应不同分辨率的屏幕 必学标签meta之viewport
- SQL Server使用侦听器IP访问时遇到The target principal name is incorrect. Cannot generate SSPI context...
- 2017 Multi-University Training Contest 3 hdu 6063
- 黑马程序员—易混淆的知识
- strtok和strtok_r
- Matlab与线性代数--矩阵的Cholesky分解
- 什么是SESSION?(三)