mvnw和mvnw.cmd文件的目的是什么?

sha*_*999 212 maven spring-boot

当我创建了一个春天启动应用程序,我可以看到mvnwmvnw.cmd文件在项目的根.这两个文件的目的是什么?

Dod*_*dge 293

这些文件来自Maven包装器.它与Gradle包装器的工作方式类似.

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

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


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

mvn -N io.takari:maven:wrapper
Run Code Online (Sandbox Code Playgroud)

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

mvn -N io.takari:maven:wrapper -Dmaven=3.3.3
Run Code Online (Sandbox Code Playgroud)

如果您已经在项目中使用了mvnw 而不是命令,那么这两个命令都需要maven on PATH(将maven 的路径添加binPath系统变量上)../mvnwmvn

  • 感谢您的回答。您能解释一下何时生成它,就像最初创建项目时一样吗?当您对pom进行更改(如添加删除依赖项/插件)时,它会沿线更新吗? (2认同)
  • 并且,您应该添加/提交 mvnw.cmd 文件吗? (2认同)
  • 是的当然。它允许您快速运行 Maven 构建,而无需额外安装 Maven 或将其放在 PATH 中。 (2认同)

Mic*_*das 26

Command mvnw使用默认情况下~/.m2/wrapper首次使用时下载的Maven .

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

distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.3.9/apache-maven-3.3.9-bin.zip
Run Code Online (Sandbox Code Playgroud)

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

./mvnw io.takari:maven:wrapper -Dmaven=3.3.9 
Run Code Online (Sandbox Code Playgroud)

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

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

mvn io.takari:maven:wrapper -Dmaven=3.3.9 
Run Code Online (Sandbox Code Playgroud)


Pat*_*mil 15

Maven的包装是需要的Maven的(或不希望在所有安装Maven用户)的特定版本的项目的最佳选择。我们可以只使用项目特定的包装器脚本,而不是在操作系统中安装它的许多版本。

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

mvnw.cmd : 适用于 Windows 环境


用例

包装器应该适用于不同的操作系统,例如:

  • Linux
  • 操作系统
  • 视窗
  • 索拉里斯

之后,我们可以像这样为 Unix 系统运行我们的目标:

./mvnw clean install
Run Code Online (Sandbox Code Playgroud)

以及以下批处理命令:

./mvnw.cmd clean install
Run Code Online (Sandbox Code Playgroud)

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


Maven 包装插件

Maven Wrapper 插件,用于在简单的 Spring Boot 项目中进行自动安装。

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

mvn -N io.takari:maven:wrapper
Run Code Online (Sandbox Code Playgroud)

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

mvn -N io.takari:maven:wrapper -Dmaven=3.5.2
Run Code Online (Sandbox Code Playgroud)

选项 -N 表示 –non-recursive 以便包装器仅应用于当前目录的主项目,而不应用于任何子模块。


来源 1(进一步阅读): https : //www.baeldung.com/maven-wrapper

  • 也许你应该提到部分文本是从 https://www.baeldung.com/maven-wrapper 中提取的 (7认同)