-
昨天(2024-06-21)看到一篇文章,介绍 mvnd 1.0 正式发布,可以提高构建速度,
于是在自己电脑上测试了一下确实能提高不少速度。 -
在网上查了一下,并没有找到 mvnd 1.0 的镜像,于是自己便制作了一下镜像。
-
如果 package 中包含中文文件名的文件,可能存在打包异常,请执行
LANG=C.UTF-8命令后再打包(PS. 查看字符命令locale)
仓库与代码
| 仓库/地址 | 仓库类型 | 说明 |
|---|---|---|
| maven-mvnd | GitHub 仓库 | Apache 项目,制作镜像的源代码仓库 |
| mvnd | GitHub 仓库 | 作者仓库,使用 maven-mvnd 制作镜像的仓库源码 |
| mvnd | Gitee 仓库 | 作者仓库,国内使用 |
| mvnd | GitLab 仓库 | 作者仓库,用于在国外构建镜像,提高拉取镜像、构建镜像、推送镜像的速度 |
测试准备
作者使用 个人自建GitLab 测试 mvnd 构建,更符合多数国内公司的使用场景
- 2015 年笔记本
- 2 核 4 线程
- 16G 内存,长期固定内存占用超过 9G
使用 pig 项目作为测试项目
- master 为 JDK 8 分支
- jdk17 为 JDK 17 分支
- 已上两个分支均测试
相关链接
测试 mvn CI/CD
mvn JDK 8 CI/CD
build-mvn:
stage: build
image: registry.cn-qingdao.aliyuncs.com/xuxiaoweicomcn/maven:3.6.3-jdk-8
script:
- mvn -V clean package
cache:
key: "${CI_JOB_NAME}"
paths:
- .m2/repository
mvn JDK 17 CI/CD
build-mvn:
stage: build
image: registry.cn-qingdao.aliyuncs.com/xuxiaoweicomcn/maven:3.6.3-openjdk-17
script:
- mvn -V clean package
cache:
key: "${CI_JOB_NAME}"
paths:
- .m2/repository
测试 mvnd CI/CD
mvnd JDK 8 CI/CD
build-mvnd:
stage: build
image: registry.cn-qingdao.aliyuncs.com/xuxiaoweicomcn/mvnd:1.0.3-dragonwell-8-anolis
variables:
LANG: C.UTF-8
script:
- mvnd -V clean package
cache:
key: "${CI_JOB_NAME}"
paths:
- .m2/repository
mvnd JDK 17 CI/CD
build-mvnd:
stage: build
image: registry.cn-qingdao.aliyuncs.com/xuxiaoweicomcn/mvnd:1.0.3-dragonwell-17-anolis
variables:
LANG: C.UTF-8
script:
- mvnd -V clean package
cache:
key: "${CI_JOB_NAME}"
paths:
- .m2/repository
构建时间
| 环境 | mvn CI/CD | mvn 耗时 | mvnd CI/CD | mvnd 耗时 | 耗时(mvnd ÷ mvn) |
|---|---|---|---|---|---|
| JDK 8 | jobs/1306 | 54.359 s | jobs/1304 | 36.391 s | 66.95 % |
| JDK 17 | jobs/1298 | 41.450 s | jobs/1307 | 30.033 s | 72.46 % |
分析
- 无论 JDK 是 8 还是 17,速度都有不少的提升
- 测试耗时影响因素比较多,比如服务器的 CPU、内存 型号及当前占用率等,测试环境相对稳定,结果比较可信
- 使用 mvn 直接构建时,本身就不超过 1 分钟,使用 mvnd 提升效果可能看上去并不明显,如果使用 mvn 构建时间比较长,测试效果可能会更突出
- 由于 mvnd 的设计原理,可以重复构建效率提升更多,此处使用独立的环境,构建完成便立即销毁,所以无法测试重复构建的效率
- mvnd 官方暂未支持默认读取
MAVEN_OPTS环境变量,如果要使用此环境变量,可以使用命令mvn clean package $MAVEN_OPTS
临时解决