1 背景
项目工程结构复杂,模块很多,传统的maven构建效率很慢,需要几分钟甚至十几分钟的时长,急需提高maven构建效率
1.1 maven-mvnd介绍
maven-mvnd和maven没有直接的关系,它们是两个完全独立的的项目。但是maven-mvnd是完全兼容maven的所有特征的,使用方式和命令操作完全和maven一样。
它最大的特点就是编译速度快,占用内存少,根据官方的描述可以总结为下面几点:
- mvnd 嵌入了 Maven(因此无需单独安装 Maven)。
- 实际构建发生在一个长期存在的后台进程中,也就是守护进程。
- 一个守护程序实例可以处理来自 mvnd 客户端的多个连续请求。
- mvnd 客户端是使用 GraalVM 构建的本机可执行文件。与启动传统 JVM 相比,它启动速度更快,占用的内存更少。
- 如果没有空闲守护进程来为构建请求提供服务,则可以并行生成多个守护进程。
- 用于运行实际构建的 JVM 不需要为每个构建重新开始。
- 保存 Maven 插件类的类加载器缓存在多个构建中。因此,插件 jar 只需读取和解析一次。不缓存 Maven 插件的 SNAPSHOT 版本。
- JVM 内部的实时 (JIT) 编译器生成的本机代码也会保留。与普通 Maven 相比,JIT 编译花费的时间更少。在重复生成期间,JIT 优化代码会立即可用。这不仅适用于来自 Maven 插件和 Maven Core 的代码,也适用于来自 JDK 本身的所有代码。
2 maven-mvnd安装
整体安装比较简单,跟maven安装是一样的,可以使用便捷安装,也可以手动自己安装(小白适合,不关注安装目录,自动安装说明地址:https://github.com/apache/maven-mvnd),以下以手动安装为例。
2.1 mvnd下载
下载地址:https://github.com/apache/maven-mvnd/releases
找到合适的版本,打开Assets折叠标签,即是下载地址,说明是当前「1.0.2」是适配jdk8的,选择的时候可以看看jdk要求和自带的maven版本,是否适合项目。
2.2 mvnd安装
2.2.1 解压
将下载文件加压到安装目录(注意安装路径不要有中文和空格等特殊字符)
2.2.2 配置环境变量
编辑 Shell 配置文件(如
~/.zshrc
或~/.bashrc
):echo 'export PATH="/usr/local/mvnd/bin:$PATH"' >> ~/.zshrc # Zsh 用户 # 博主示例 JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home M2_HOME=/Users/navis/java/apache-maven-3.9.5 MVND_HOME=/Users/navis/java/maven-mvnd-1.0.2 HOME_BREW=/opt/homebrew PATH=$JAVA_HOME/bin:$M2_HOME:$M2_HOME/bin:$HOME_BREW/bin:$MVND_HOME/bin:$PATH:. export JAVA_HOME export M2_HOME export MVND_HOME export PATH # 或 echo 'export PATH="/usr/local/mvnd/bin:$PATH"' >> ~/.bashrc # Bash 用户
生效配置:
source ~/.zshrc # 或 source ~/.bashrc
2.2.3 配置mvnd
打开mvnd的安装目录,进入conf目录,找到配置文件「mvnd.properties」
# JAVA_HOME
# Java home for starting the daemon. The client normally sets this as environment variable: JAVA_HOME
# 如果存在多个jdk版本,可以指定路径
# java.home=<path>
# 需要指定已有的maven的setting配置文件,不然会使用自带的默认配置
# The location of the maven settings file. The client normally uses default settings in {@code ~/.m2/settings.xml}.
maven.settings=/Users/navis/java/apache-maven-3.9.5/conf/settings.xml
2.2.4 验证安装
mvnd --version
成功输出示例:
Apache Maven Daemon (mvnd) 1.0.2 darwin-aarch64 native client (cccc1ec8a5b741c62b29f9fb04d37b1678a029bb)
Terminal: org.jline.terminal.impl.PosixSysTerminal with pty org.jline.terminal.impl.jni.osx.OsXNativePty
Apache Maven 3.9.9 (8e8579a9e76f7d015ee5ec7bfcdc97d260186937)
Maven home: /Users/navis/java/maven-mvnd-1.0.2/mvn
Java version: 1.8.0_391, vendor: Oracle Corporation, runtime: /Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "mac os x", version: "14.2.1", arch: "aarch64", family: "mac"
2.2.5 mac无法打开“mvnd”,因为Apple无法检查其是否包含恶意软件问题解决
通过系统设置允许(图形界面操作)
- 打开 系统设置 > 隐私与安全性
- 在”安全性”部分,你会看到关于 mvnd 的警告信息
- 点击 “仍要打开” 按钮(可能需要输入密码)
- 之后再次尝试运行
mvnd --version
3 intellij idea 集成使用
3.1 安装maven helper插件
去设置中的插件市场搜索安装即可
3.2 配置maven helper插件
在「设置」-》「其他设置」中找到「maven helper」,没有就直接搜索。
- 勾选配置项:Use a Terminal to run goals, with a custom mvn command : mvnd
- 增加Goals 快捷命令:clean deploy -DskipTests等,按需增加
3.3 使用mvnd构建
有三种方式运行
- 点击项目右键,选择Run Maven,最后选择自己的命令,例如:clean deploy -DskipTests
- 点击maven窗口,点击项目右键,选择Run Maven,最后选择自己的命令,例如:clean deploy -DskipTests
- 直接命令窗口执行mvnd clean deploy -DskipTests
4 效果展示
项目 | maven构建 | maven-mvnd构建 |
---|---|---|
lcp-app | 01:50 min | 32.380 s |
lcp-plugin | 02:16 min | 22.063 s |
作者:聂维 创建时间:2025-06-13 11:13
最后编辑:聂维 更新时间:2025-06-13 11:19
最后编辑:聂维 更新时间:2025-06-13 11:19