前言
相信不少同学在 GitHub 上克隆 Maven 项目时,都会看到一个 mvnw/mvnw.cmd(下文统称 mvnw)脚本文件。它到底从哪里来?又解决了什么问题?本文就围绕这两个问题,把 mvnw 的来源与用法讲清楚。
mvnw 是什么?为什么 Maven 项目会带它?
聊 mvnw 就绕不开一个 Maven 工具:Maven Wrapper。
mvnw 正是通过 Maven Wrapper 生成的脚本,用来为项目构造构建时依赖的 Maven 环境。更直白一点说:
- 它让项目使用者的 Maven 环境尽量与项目开发者的 Maven 环境保持一致
- 对使用者更友好:构建项目时不需要提前全局安装 Maven,直接执行
mvnw 即可(脚本会按配置下载并使用指定版本的 Maven)
如果你经常维护团队项目、或者需要在 CI 环境里稳定构建,那么在 Maven 项目中引入 Wrapper 往往能减少很多“环境不一致”的问题。
如何生成 mvnw:Maven Wrapper 命令
Maven Wrapper 本质上依赖 Maven 项目本身,因此创建 mvnw 的命令如下(用于在项目中生成 Wrapper 相关文件):
mvn wrapper:wrapper -Dtype={type} -Dmaven={version}
参数说明:
type 取值范围:only-script、script、bin、source
version 为 Maven 的发行版本号,可参考附录链接 apache-maven/versions
下面通过一个完整示例走一遍实际操作。
1. 示例环境
- Ubuntu 24.04.2 LTS
- JDK21.0.2
- Apache Maven 3.9.8
- IntelliJ IDEA 2025.1.3 (Community Edition)
2. 示例代码
2.1 项目结构
创建名为 maven-wrapper-example 的项目,其结构如下:
▼ 图一

2.2 使用 maven-wrapper 插件生成 mvnw
进入项目目录:
cd ~/workspace/workspace3/maven-wrapper-example/
生成 mvnw:
mvn wrapper:wrapper -Dscript
▼ 图二

▼ 图三

温馨提示
- 可通过
-Dmavne=version 参数指定 mvnw 脚本中 Maven 的版本号;如果不指定则默认为 mvn 命令的相同版本号;
- 也可通过生成的
/.mvn/wrapper/maven-wrapper.properties 文件中 distributionUrl 选项指定;
- 更多使用细节可参考附录链接
Maven Wrapper。
2.3 执行 mvnw 脚本构建项目
执行 mvnw 脚本文件:
./mvnw package
▼ 图四

温馨提示
这里的 ./mvnw package 命令可以替换成任何合法的 mvn 命令。你可以把 mvnw 当作 mvn 的直接替换,例如:mvnw clean、mvnw compile -DskipTests 等。
总结
mvnw 的核心价值在于:把 Maven 版本与构建行为“绑定”到项目里。这样无论是新同事拉代码、还是在不同机器/不同流水线环境构建,都能更接近“开箱即用”的体验,减少环境差异带来的问题。
想围绕构建工具、依赖管理、工程化实践做进一步交流,也可以到 云栈社区 继续讨论与沉淀。
附录
|