maven并行编译
Java开发人员大部分普遍用过maven
maven作为项目管理工具
帮助我们管理依赖与构建项目
常见命令就是
# 打包
mvn clean package
# 安装到仓库
mvn clean install
但随着项目或者模块的越来越多
打包速度越来越慢
这个时候自然而然想有没有提高打包速度的方式
因为看过gradle的文章,知道gradle编译是有多线程的
那么maven编译有没有呢
查找资料后有2种
- maven3原生命令
- mvnd
maven3
# 直接上命令
# 4线程构建
mvn -T 4 clean install
# 每个cpu核心1个线程,比如我是4核cpu那么就4个线程
mvn -T 1C clean install
# 每个cpu核心1.5个线程
mvn -T 1.5C clean install
在并行编译模式下会分析我们项目的依赖图并调度可以并行执行的模块从而加速构建
官方文档说了虽然这个新特性经过了大量测试,但仍然建议我们项目内部需要自己慢慢实践
并且可能有部分插件不是线程安全的,这个会通过@threadSafe
提示
maven3中并行执行的过程,是一层一层执行的,比如第一层先并行执行完5个模块,再并行执行完第二层的3个模块
耗时取决于编译时间最长的那个模块,所以如果多的小模块收益会更大
mvnd
说到mvnd就不得不提一下gradle
gradle的编译快是基于C/S架构
启动gradle的时候会在后台启动一个server端
gradle默认支持多线程处理
服务端可以重用之前的输入和输出,在增量编译上速度非常快
mvnd指在提供类似于gradle和Takari的更快的maven构建方式
mvnd采用了takari smart builder,比原先maven的并行更快一些
图片来源
安装mvnd
github下载安装包
也可以用Scoop等包管理工具
Windows手动下载二进制文件情况下
需要配置一下环境变量
修改maven仓库地址为自己的(如果需要的话
# MVND_HOME/conf/mvnd.properties
# 拉到最下面修改maven.settings
maven.settings=xxx\\apache-maven-3.5.0\\conf\\settings.xml
使用
使用命令和mvn一样
只是把mvn换成mvnd即可
mvnd clean package
mvn vs mvnd
在选择原生maven或者mvnd上
我个人觉得maven3提供的并行构建也够用了
大约提升了50%的构建速度
当然花点心思用上mvnd也可以
也没啥成本
考虑实际情况旧项目迁移到gradle基本不太可能
现在同事也不用gradle