什么是mvnw
mvnw是Maven Wrapper的缩写。因为我们安装Maven时,默认情况下,系统所有项目都会使用全局安装的这个Maven版本。但是,对于某些项目来说,它可能必须使用某个特定的Maven版本,这个时候,就可以使用Maven Wrapper,它可以负责给这个特定的项目安装指定版本的Maven,而其他项目不受影响。
简单地说,Maven Wrapper就是给一个项目提供一个独立的,指定版本的Maven给它使用。
作用:
mvnw是一个maven wrapper script,它可以让你在没有安装maven或者maven版本不兼容的条件下运行maven的命令.
原理:
- 它会寻找maven在你电脑环境变量path中的路径。
- 如果没有找到这个路径它就会自动下载maven到一个默认的路径下,之后你就可以运行maven命令了。
- 有时你会碰到一些项目的peoject和你本地的maven不兼容,它会帮你下载合适的maven版本,然后运行。
总结:mvnw是一个maven wrapper script,它可以让你在没有安装maven或者maven版本不兼容的条件下运行maven的命令.
Maven Wrapper (mvnw) 的设计初衷就是让你不必预先安装Maven。
Maven Wrapper 特点
- 自包含
- 不需要预先安装Maven
- 项目中自带Maven运行环境
- 可以直接使用
./mvnw
- 工作原理
- 首次运行会自动下载指定版本的Maven
- 将Maven下载到项目的
.mvn
目录 - 后续使用下载的Maven版本
推荐做法
- 项目优先使用
./mvnw
- 保持 Wrapper 在版本控制中
- 团队统一构建环境
注意事项
- 需要有网络连接(首次下载Maven)
- 初次使用会稍慢(下载Maven)
- 后续使用与本地Maven无异
macos下使用流程说明
- 第一次需要先安装Maven
# macOS (使用Homebrew)
brew install maven
# 验证Maven安装
mvn -v
- 使用Maven生成Wrapper
# 在项目根目录
mvn wrapper:wrapper
- 生成后即可使用
# 添加执行权限
chmod +x mvnw
# 使用Wrapper
./mvnw clean install
- 总结
- 第一次:需要Maven
- 之后:可以完全使用
./mvnw
安装Maven Wrapper
安装Maven Wrapper最简单的方式是在项目的根目录(即pom.xml所在的目录)下运行安装命令:
mvn -N io.takari:maven:0.7.7:wrapper
它会自动使用最新版本的Maven。注意0.7.6是Maven Wrapper的版本。最新的Maven Wrapper版本可以去官方网站(https://github.com/takari/maven-wrapper)查看。
如果要指定使用的Maven版本,使用下面的安装命令指定版本,例如3.6.0:
mvn -N io.takari:maven:0.7.7:wrapper -Dmaven=3.6.0
安装后,查看项目结构,
发现多了mvnw、mvnw.cmd和.mvn目录,我们只需要把mvn命令改成mvnw就可以使用跟项目关联的Maven。
例如:
mvnw clean package
Maven Wrapper的另一个作用是把项目的mvnw、mvnw.cmd和.mvn提交到版本库中,可以使所有开发人员使用统一的Maven版本。
Maven Wrapper的另一个作用是把项目的mvnw、mvnw.cmd和.mvn提交到版本库中,可以使所有开发人员使用统一的Maven版本。
使用Maven Wrapper,可以为一个项目指定特定的Maven版本。
springboot2启动可以使用mvnw 命令
在Spring Boot工程中自带的有两个文件:mvnw与mvnw.cmd。这两个是什么文件呢?
Maven是一个常用的构建工具,但是Maven的版本和插件的配合并不是十分完美,有时为了保证有些插件的正常运行,我们不得不需要切换到一个稍微旧一些的版本。而这个切换工作需要用户重新安装一个Maven,那么就太麻烦了。
有一个工具Maven Wrapper(包装器),可以完成在Maven的某一版本下轻松切换到其它版本的目的。需要注意的是,Maven Wrapper并不是Maven官方提供的工具,而是第三方工具,若要使用,则需要安装。
Spring Boot工程中的mvnw即为安装好的Maven Wrapper工具。其中mvnw.cmd为Maven Wrapper的命令行运行窗口,而mvnw文件则为Maven Wrapper的配置文件。
在学习springboot2的时候,我们会发现,可以用 命令 mvnw spring-boot:run 来启动项目。
使用这个命令,依赖于项目中的 mvnw,mvnw.bat,mvnw文件夹。