当我创建一个Spring Boot应用程序时,我可以在项目的根目录中看到mvnw
和mvnw.cmd
文件。这两个文件的目的是什么?
当我创建一个Spring Boot应用程序时,我可以在项目的根目录中看到mvnw
和mvnw.cmd
文件。这两个文件的目的是什么?
Answers:
这些文件来自Maven包装器。它的工作方式类似于Gradle包装器。
这使您可以运行Maven项目,而无需在路径上安装Maven和安装Maven。如果找不到正确的Maven版本,它将下载正确版本(据我所知,默认情况下在您的用户主目录中)。
该mvnw
文件适用于Linux(bash),mvnw.cmd
适用于Windows环境。
要创建或更新所有必需的Maven包装器文件,请执行以下命令:
mvn -N io.takari:maven:wrapper
要使用其他版本的maven,可以如下指定版本:
mvn -N io.takari:maven:wrapper -Dmaven=3.3.3
如果您的项目中已经有mvnw,则可以使用代替命令中的命令,这两个命令都需要打开maven PATH
(将maven 的路径添加bin
到Path
系统变量上)。./mvnw
mvn
Command mvnw
使用的Maven在默认情况下~/.m2/wrapper
是首次下载到的。
每个项目中都在.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
该Maven的包装是需要的Maven的(或不希望在所有安装Maven用户)的特定版本的项目的最佳选择。无需在操作系统中安装多个版本,只需使用特定于项目的包装器脚本即可。
mvnw:这是一个可执行的Unix shell脚本,用于代替完全安装的Maven
mvnw.cmd:适用于Windows环境
用例
包装程序应与其他操作系统配合使用,例如:
之后,我们可以针对Unix系统执行以下目标:
./mvnw clean install
并为批处理使用以下命令:
./mvnw.cmd clean install
如果包装属性中没有指定的Maven,则会将其下载并安装在$USER_HOME/.m2/wrapper/dists
系统文件夹中。
Maven包装器插件
Maven Wrapper插件可在一个简单的Spring Boot项目中进行自动安装。
首先,我们需要进入项目的主文件夹并运行以下命令:
mvn -N io.takari:maven:wrapper
我们还可以指定Maven的版本:
mvn -N io.takari:maven:wrapper -Dmaven=3.5.2
选项-N表示–non-recursive,因此包装器将仅应用于当前目录的主项目,而不应用于任何子模块。
到目前为止,最好的选择是使用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 "$@"
mvn
命令进行Maven操作,尽管我可以将其./mvnw
用于相同的目的。