【发布时间】:2016-12-08 00:12:36
【问题描述】:
当我创建 Spring Boot 应用程序时,我可以在项目的根目录中看到 mvnw 和 mvnw.cmd 文件。这两个文件的用途是什么?
【问题讨论】:
标签: maven spring-boot
当我创建 Spring Boot 应用程序时,我可以在项目的根目录中看到 mvnw 和 mvnw.cmd 文件。这两个文件的用途是什么?
【问题讨论】:
标签: maven spring-boot
简短回答:无需手动安装过程即可在终端中运行 Maven 和 Gradle。
Gradle 示例:
./gradlew clean build
./gradlew bootRun
Maven 示例:
./mvnw clean install
./mvnw spring-boot:run
"推荐的执行任何 Gradle 构建的方法是借助 Gradle Wrapper(简称“Wrapper”)。Wrapper 是一个脚本,它调用已声明版本的Gradle,如有必要,请提前下载。因此,开发人员可以快速启动并运行 Gradle 项目,而无需遵循手动安装过程节省您公司的时间和金钱。“
Gradle 还会添加一些与 Maven 文件 Gradlew 和 Gradle.bat
对应的特定文件【讨论】:
Maven Wrapper 是需要特定 Maven 版本的项目(或根本不想安装 Maven 的用户)的绝佳选择。 无需在操作系统中安装多个版本,我们只需使用项目特定的包装脚本即可。
mvnw:它是一个可执行的 Unix shell 脚本,用于代替完全安装的 Maven
mvnw.cmd:适用于Windows环境
用例
包装器应该适用于不同的操作系统,例如:
之后,我们可以像这样在 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表示--non-recursive,这样包装器只会应用于当前目录的主项目,而不是任何子模块。
来源 1(进一步阅读): https://www.baeldung.com/maven-wrapper
【讨论】:
这些文件来自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
这两个命令都需要 maven on PATH(将 maven bin 的路径添加到系统变量上的 Path)如果您的项目中已经有 mvnw,您可以在命令中使用 ./mvnw 而不是 mvn .
【讨论】:
mvn 命令进行 maven 操作,尽管我可以将 ./mvnw 用于相同目的。
目前最好的选择是使用 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 "$@"
【讨论】:
命令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
要更新或更改 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
【讨论】: