mvnw和mvnw.cmd文件的用途是什么?

时间:2016-08-02 14:53:21

标签: maven spring-boot

当我创建Spring Boot应用程序时,我可以在项目的根目录中看到print 'abcd'[::-1] >>> dcba mvnw个文件。这两个文件的目的是什么?

4 个答案:

答案 0 :(得分:253)

这些文件来自Maven wrapper。它的工作方式与Gradle wrapper类似。

这使您可以在不安装Maven的情况下运行Maven项目并显示在路径上。它会下载正确的Maven版本(如果没有找到)(据我所知,默认情况下在用户主目录中)。

mvnw文件适用于Linux(bash),mvnw.cmd适用于Windows环境。

要创建或更新所有必需的Maven Wrapper文件,请执行以下命令:

mvn -N io.takari:maven:wrapper

要使用不同版本的maven,您可以按如下方式指定版本:

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

两个命令都需要PATH上的maven(在系统变量上添加maven binPath的路径)如果你的项目中已经有mvnw你可以使用./mvnw而不是命令中的mvn

答案 1 :(得分:23)

命令mvnw使用首次使用时默认下载到~/.m2/wrapper的Maven。

.mvn/wrapper/maven-wrapper.properties的每个项目中指定了Maven的URL:

distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.3.9/apache-maven-3.3.9-bin.zip

要更新或更改Maven版本,请调用以下内容(请记住多模块项目的--non-recursive):

./mvnw io.takari:maven:wrapper -Dmaven=3.3.9 

或只是手动修改.mvn/wrapper/maven-wrapper.properties

使用Maven从头开始生成包装器(您需要在PATH运行中使用它:

mvn io.takari:maven:wrapper -Dmaven=3.3.9 

答案 2 :(得分:3)

到目前为止,最好的选择是使用maven容器作为构建工具。像这样的mvn.sh脚本就足够了:

#!/bin/bash
docker run --rm -ti \
 -v $(pwd):/opt/app \
 -w /opt/app \
 -e TERM=xterm \
 -v $HOME/.m2:/root/.m2 \
 maven mvn "$@"

答案 3 :(得分:2)

Maven Wrapper是需要特定版本的Maven的项目(或根本不想安装Maven的用户)的绝佳选择。 我们可以使用项目特定的包装器脚本来代替在操作系统中安装多个版本。

mvnw:是一个可执行的Unix shell脚本,用于代替完全安装的Maven

mvnw.cmd :适用于Windows环境


用例

包装程序应与其他操作系统配合使用,例如:

  • Linux
  • OSX
  • Windows
  • Solaris

之后,我们可以针对Unix系统执行以下目标:

./mvnw clean install

以及以下用于批处理的命令:

./mvnw.cmd clean install

如果包装属性中没有指定的Maven,则会将其下载并安装在系统的文件夹$USER_HOME/.m2/wrapper/dists中。


Maven Wrapper插件

Maven Wrapper plugin在一个简单的Spring Boot项目中进行自动安装。

首先,我们需要进入项目的主文件夹并运行以下命令:

mvn -N io.takari:maven:wrapper

我们还可以指定Maven的版本:

mvn -N io.takari:maven:wrapper -Dmaven=3.5.2

选项-N表示–非递归,因此包装程序将仅应用于当前目录的主项目,而不应用于任何子模块。