当我创建了一个Spring Boot应用程序,我可以看到mvnw和mvnw.cmd文件在项目的根。这两个文件的目的是什么?

Maven用于应用的编译,测试,打包,发布……
我们使用Maven时,基本上只会用到mvn这一个命令。有些童鞋可能听说过mvnw,这个是啥?
mvnw是Maven Wrapper的缩写。因为我们安装Maven时,默认情况下,系统所有项目都会使用全局安装的这个Maven版本。但是,对于某些项目来说,它可能必须使用某个特定的Maven版本,这个时候,就可以使用Maven Wrapper,它可以负责给这个特定的项目安装指定版本的Maven,而其他项目不受影响。
简单地说,Maven Wrapper就是给一个项目提供一个独立的,指定版本的Maven给它使用。
Maven Wrapper的另一个作用是把项目的mvnwmvnw.cmd.mvn提交到版本库中,可以使所有开发人员使用统一的Maven版本。

安装Maven Wrapper

安装Maven Wrapper最简单的方式是在项目的根目录(即pom.xml所在的目录)下运行安装命令:

  1. mvn -N io.takari:maven:0.7.6:wrapper

它会自动使用最新版本的Maven。注意0.7.6是Maven Wrapper的版本。最新的Maven Wrapper版本可以去官方网站查看。
如果要指定使用的Maven版本,使用下面的安装命令指定版本,例如3.3.3

  1. mvn -N io.takari:maven:0.7.6:wrapper -Dmaven=3.3.3

安装后,查看项目结构:

  1. my-project
  2. ├── .mvn
  3. └── wrapper
  4. ├── MavenWrapperDownloader.java
  5. ├── maven-wrapper.jar
  6. └── maven-wrapper.properties
  7. ├── mvnw
  8. ├── mvnw.cmd
  9. ├── pom.xml
  10. └── src
  11. ├── main
  12. ├── java
  13. └── resources
  14. └── test
  15. ├── java
  16. └── resources

发现多了mvnwmvnw.cmd.mvn目录,我们只需要把mvn命令改成mvnw就可以使用跟项目关联的Maven。例如:

  1. mvnw clean package

在Linux或macOS下运行时需要加上./

  1. ./mvnw clean package