取代 Maven?这款项目构建工具性能提升 300%
在 GitHub 上闲逛的时候,发现了一个新的项目:maven-mvnd,持续霸占 GitHub trending 榜单好几天了。

maven-mvnd,可以读作 Maven Daemon,译作 Maven 守护版,旨在为 Maven 提供更快的构建速度,灵感借鉴了 Gradle 和 Takari(Maven 生命周期优化器)。
https://github.com/apache/maven-mvnd
Maven 和 Gradle 可以说是项目构建工具中的绝代双骄,我自己的观点是:Maven 不比 Gradle 好,Gradle 也不比 Maven 好。

瞧我这该死的观点,足够的圆滑。
Maven 的优点是稳定可靠,在绝大多数的项目上工作良好,社区生态很完善,几乎所有的 Java 开发者都在用。Maven 的缺点是,对于大一点的项目来说,构建太慢了。
Gradle 的优点是足够的灵活,构建速度也会更快一点,因为使用了后台进程和缓存机制。Gradle 的缺点是版本迭代速度太快,社区跟不上,对于初学者来说,学习曲线比较陡峭。
mvnd 并不是 Maven 的重构版,等于是 Maven ∩ (Gradle & Takari) 部分优点的一个交集。
mvnd 使用了以下架构方式:
- 内部嵌入了 Maven,所以不需要单独安装 Maven。
- 使用守护进程进行构建,守护进程可以为多个 mvnd 客户端的连续请求提供服务。
- 使用了内置的 GraalVM 虚拟机,和传统的 Java 虚拟机相比,它的启动速度更快,使用内存更少,内部的 JIT 编译器在编译时花费的时间也更少。
- 如果已有的守护进程都在工作中,则可以新建多个守护进程来支撑新的构建请求。
这种架构方式使得 mvnd 的性能优势得到了进一步提升。
好,我们来简单尝试下。
mvnd 像 Maven 一样,可以跨平台,支持 Windows、macOS和 Linux。自动化安装的命令也非常简单,如下所示:
# Windows
choco install mvndaemon
# Linux
sdk install mvnd
# macOS
brew install mvndaemon/homebrew-mvnd/mvnd
为了方便演示,我这里采用手动安装的方式,速度也会更快一点。
通过下面的网址下载 mvnd 的 release 版本:
https://github.com/apache/maven-mvnd/releases

下载完成后解压,然后把 bin 目录添加到 PATH 路径下。
在终端执行 mvnd -v 就可以查看到 mvnd 的配置信息了。

如果出现类似下面这样的错误,未找到 JAVA_HOME,可以按照提示在对应的文件中追加 java.home 属性,也就是 JDK 的安装路径。

刚好之前搭建了一个Spring Boot 项目,我们可以拿 Maven 和 mvnd 来对比一下构建速度。
先执行 mvn clean package 命令,一共花费的时间是 5.318 秒。

再执行 mvnd clean package 命令,一共花费的时间是 3.225 秒。

反复多测试几次,发现 mvnd 确实比 Maven 要快上许多!Maven 维持在 5 秒多,mvnd 维持在 3 秒左右。
当然了,我本地这个 Spring Boot 项目本身非常简单,如果是构建时间更长一点的项目,mvnd 的优势会更大。
感受一下 mvnd 在一个 24 核电脑上执行的样子吧,简直就是效率神器!

本篇已收录至 GitHub 上星标 1.0k+ star 的开源专栏《Java 程序员进阶之路》,该专栏风趣幽默、通俗易懂,对 Java 爱好者极度友好和舒适,内容包括但不限于 Java 基础、Java 集合框架、Java IO、Java 并发编程、Java 虚拟机、Java 企业级开发(Git、SSM、Spring Boot)等核心知识点。
该专栏目前也在霸榜 GitHub Trending(Java 类),这让二哥终于体会到了霸榜的快乐!

star 了这个专栏就等于你在浩瀚的 Java 知识海洋里有了一盏再也不会迷路的灯塔。

没有什么使我停留——除了目的,纵然岸旁有玫瑰、有绿荫、有宁静的港湾,我是不系之舟。
取代 Maven?这款项目构建工具性能提升 300%的更多相关文章
- 项目构建工具maven的使用方法
最近在开发javaweb项目中有用到maven,以前并不是很了解,于是学习了一些相关内容,记之共享. 本篇内容在Windows环境下实施,JDK版本使用的1.7.0_79. 一.maven是什么? 简 ...
- Java项目工程化之项目构建工具Maven
欢迎查看Java开发之上帝之眼系列教程,如果您正在为Java后端庞大的体系所困扰,如果您正在为各种繁出不穷的技术和各种框架所迷茫,那么本系列文章将带您窥探Java庞大的体系.本系列教程希望您能站在上帝 ...
- 【Parcel 2 + Vue 3】从0到1搭建一款极快,零配置的Vue3项目构建工具
前言 一周时间,没见了,大家有没有想我啊!哈哈!我知道肯定会有的.言归正传,我们切入正题.上一篇文章中我主要介绍了使用Vite2+Vue3+Ts如何更快的入手项目.那么,今天我将会带领大家认识一个新的 ...
- 前端项目构建工具---Grunt
什么是Grunt? grunt是javascript项目构建工具,在grunt流行之前,前端项目的构建打包大多数使用ant.(ant具体使用 可以google),但ant对于前端而言,存在不友好,执行 ...
- Gulp.js - 简单、直观的自动化项目构建工具
Gulp.js 是一个简单.直观的构建系统.崇尚代码优于配置,使复杂的任务更好管理.通过结合 NodeJS 的数据流的能力,你能够快速构建.通过简单的 API 接口,只需几步就能搭建起自己的自动化项目 ...
- 【项目构建工具】 Gradle笔记1
一.Gradle简介 Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具.它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XM ...
- grunt项目构建工具
JS项目构建工具Grunt实践 一:下面来介绍下如何用grunt合并,压缩js文件. 大概步骤有如下: 1. 新建文件夹相对应的项目 比如文件名叫:gruntJs 2. 新建文 ...
- 项目构建工具ant的使用
ant是项目构建工具,以xml文件作为构建文件,在这个xml文件(默认是build.xml,当然也可以取其它名字)里我们可以定义多个目标,用我们期待的方式去构建项目,比如说编译,测试,发邮件等等. a ...
- Maven实战——Gradle,构建工具的未来?
许晓斌-- 四月 05, 2011 Maven面临的挑战 软件行业新旧交替的速度之快往往令人咂舌,不用多少时间,你就会发现曾经大红大紫的技术已经成为了昨日黄花,当然,Maven也不会例外.虽然目前它基 ...
随机推荐
- Bitmaps与优化
1.有效的处理较大的位图 图像有各种不同的形状和大小.在许多情况下,它们往往比一个典型应用程序的用户界面(UI)所需要的资源更大. 读取一个位图的尺寸和类型: 为了从多种资源来创建一个位图,Bitma ...
- vue2 页面路由
vue官方文档 src/views/Login.vue <template> <div> <h2>登录页</h2> </div> </ ...
- 【Linux】【Commands】基础概念及常用基础命令
命令的语法通用格式: ------------------------------------------------ #COMMAND OPTIONS ARGUMENTS 发起命令:请求内核将某个二 ...
- 3.3 GO字符串处理
strings方法 index 判断子字符串或字符在父字符串中出现的位置(索引)Index 返回字符串 str 在字符串 s 中的索引( str 的第一个字符的索引),-1 表示字符串 s 不包含字符 ...
- SpringBoot+MybatisPlus实现批量添加的两种方式
第一种: 因为Mysql数据每次发送sql语句的长度不能超过1M,所以,每次发送insert语句以固定长度发送: 将sql语句在provider中,以固定长度装入List集合中,然后返回service ...
- C/C++ Qt 数据库SqlRelationalTable关联表
在上一篇博文中详细介绍了SqlTableModle组件是如何使用的,本篇博文将介绍SqlRelationalTable关联表组件,该组件其实是SqlTableModle组件的扩展类,SqlRelati ...
- 『与善仁』Appium基础 — 22、获取元素信息的操作(一)
目录 1.获取元素文本内容 (1)text()方法 (2)get_attribute()方法 (3)综合练习 2.获取元素在屏幕上的坐标 1.获取元素文本内容 (1)text()方法 业务场景: 进入 ...
- Table.NestedJoin合并…Join(Power Query 之 M 语言)
数据源: "销量表"和"部门表"两个查找表,每个表中都有"姓名"列 目标: 根据"姓名列"将"部门表" ...
- android studio出现 Could not initialize class com.android.sdklib.repository.AndroidSdkHandler
新的android studio (4.2)已经不支持旧有的 com.android.tools.build:gradle:2.3.3 了,有些方法和类会找不到. 去build.gradle中把这个 ...
- TensorFlow.NET机器学习入门【0】前言与目录
曾经学习过一段时间ML.NET的知识,ML.NET是微软提供的一套机器学习框架,相对于其他的一些机器学习框架,ML.NET侧重于消费现有的网络模型,不太好自定义自己的网络模型,底层实现也做了高度封装. ...