Maven 与 Maven Wrapper

Maven 与 Maven Wrapper(mvnw)对比


一、它们分别是什么

Maven — Java 项目的"构建管家"。你的代码要编译、测试、打包、管依赖(比如要用 MySQL 驱动、Spring 框架),Maven 读你的 pom.xml 帮你干完所有这些事。

mvnw(Maven Wrapper) — 就是一个 shell 脚本,自带自动下载 Maven 的能力。它确保任何机器、任何人,都用项目指定的同一个 Maven 版本来构建。


二、最直观的区别:第一次用的体验

传统 Mavenmvnw
第一步去官网下载 → 解压 → 配置 MAVEN_HOMEPATH 环境变量 → source ~/.zshrc什么都不用装
使用命令mvn clean package./mvnw clean package
新同事 clone 项目后“你装 Maven 了吗?哪个版本?我 3.8 行不行?”直接 ./mvnw,完事

三、一个生活化的类比

传统 mvn 就像你电脑上装的 Photoshop——要安装、要激活,换了电脑还得重装一遍。

mvnw 就像U 盘里的绿色版 Photoshop——插上去双击就能用,不写注册表,用完拔走,换哪台电脑都一样。

再多一层:mvnw 不仅是绿色软件,还是会自动下载的绿色软件。第一次运行它发现本地没有 Maven,就自己去 Apache 官网下载,然后缓存到 ~/.m2/wrapper/dists/,以后就用缓存的,不再下载。

第一次 ./mvnw:下载 Maven → 缓存到本地 → 执行构建
第二次及以后:直接用缓存 → 执行构建(秒启)

四、锁定版本的意义

如电脑上三个不同项目用了三个不同版本的 Maven:

~/.m2/wrapper/dists/
├── apache-maven-3.6.3   ← 老项目 A 指定
├── apache-maven-3.9.9   ← 项目 B 指定
└── apache-maven-3.9.16  ← 当前项目 C 指定

各用各的,互不干扰。不会出现"我 3.9 能构建,你 3.6 就报错"这种版本不一致导致的诡异问题。


五、核心对比表

传统 MavenMaven Wrapper
安装方式手动下载、解压、配环境变量无需安装,就是一段脚本
命令mvn./mvnw
Maven 本体位置你指定的某个目录自动下载到 ~/.m2/wrapper/dists/
依赖环境变量MAVEN_HOME + PATH不需要,脚本自己知道路径
版本控制全机器共用同一个版本每个项目锁定自己的版本
新机器上手装 Maven → 配环境变量clone 项目 → ./mvnw
适合场景个人固定机器团队协作、CI/CD

六、一句话总结

mvn 是你电脑上装的;mvnw 是项目自带的。

装 mvn 像给整台电脑装软件,需要环境变量;mvnw 像每个项目自备一份绿色版 Maven,项目走到哪 Maven 跟到哪。

补充-Maven / mvnw 常用命令

所有命令两者通用,只是前缀不同:mvn 换成 ./mvnw


核心生命周期命令

命令作用
mvn clean清空 target/ 目录,删除所有编译产物
mvn compile编译 src/main/java 下的源码
mvn test运行所有单元测试
mvn package编译 → 测试 → 打包(jar 或 war)
mvn install打包 → 安装到本地仓库 ~/.m2/repository/,供其他项目引用
mvn deploy打包 → 上传到远程仓库(私有/公有 Nexus、Artifactory)

日常高频命令

命令作用
mvn clean package最常用:清空 → 打包,跳过单元测试用下面的
mvn clean package -DskipTests清空 → 打包,跳过测试执行
mvn clean package -Dmaven.test.skip=true清空 → 打包,连测试编译都跳过
mvn spring-boot:run直接运行 Spring Boot 项目
mvn dependency:tree查看完整的依赖树,排查依赖冲突必备
mvn clean package -DskipTests && java -jar target/xxx.jar打完包直接运行

指定文件/模块

命令作用
mvn clean package -f pom.xml指定 pom 文件构建(多模块项目用)
mvn clean package -pl 模块名只构建指定子模块
mvn clean package -pl 模块名 -am构建指定模块 + 它依赖的模块

测试相关

命令作用
mvn test运行全部测试
mvn test -Dtest=UserServiceTest只跑指定测试类
mvn test -Dtest=UserServiceTest#testLogin只跑指定测试方法

版本/检查

命令作用
mvn --version查看 Maven 和 JDK 版本
mvn validate验证项目结构是否正确
mvn versions:display-dependency-updates查看哪些依赖有更新版本

快速记忆

clean  → 清空
compile → 编译
test   → 测试
package → 打包
install → 装到本地仓库

最常用就这一条:
./mvnw clean package -DskipTests
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值