Maven mvnw和mvnw.cmd文件的用途是什么?
当我创建一个Spring启动应用程序时,我可以在项目的根目录中看到Maven mvnw和mvnw.cmd文件的用途是什么?,maven,spring-boot,Maven,Spring Boot,当我创建一个Spring启动应用程序时,我可以在项目的根目录中看到mvnw和mvnw.cmd文件。这两个文件的用途是什么?这些文件来自。它的工作原理类似于 这允许您运行Maven项目,而无需在路径上安装和显示Maven。如果找不到它,它将下载正确的Maven版本(据我所知,默认情况下是在您的用户主目录中) mvnw文件适用于Linux(bash),而mvnw.cmd文件适用于Windows环境 要创建或更新所有必要的Maven包装文件,请执行以下命令: mvn -N io.takari:mav
mvnw
和mvnw.cmd
文件。这两个文件的用途是什么?这些文件来自。它的工作原理类似于
这允许您运行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
这两个命令都要求maven打开
PATH
(将mavenbin的路径添加到系统变量上的PATH
)如果您的项目中已经有mvnw,您可以在命令中使用/mvnw
而不是mvn
。命令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版本,请调用以下命令(记住关于多模块项目的--非递归):
或者手动修改.mvn/wrapper/maven wrapper.properties
要使用Maven从头开始生成包装器(您需要让它已经在PATH
run中运行:
mvn io.takari:maven:wrapper -Dmaven=3.3.9
到目前为止,最好的选择是使用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 "$@"
对于需要特定版本Maven的项目(或根本不想安装Maven的用户),是一个很好的选择。我们可以使用特定于项目的包装脚本,而不是在操作系统中安装许多版本的Maven。
mvnw:这是一个可执行的Unix shell脚本,用于代替完全安装的Maven
mvnw.cmd:用于Windows环境
用例
包装器应适用于不同的操作系统,例如:
- Linux
- OSX
- 窗户
- Solaris
之后,我们可以在Unix系统上运行以下目标:
./mvnw clean install
以及以下批处理命令:
./mvnw.cmd clean install
如果包装器属性中没有指定的Maven,它将被下载并安装在系统的文件夹$USER\u HOME/.m2/wrapper/dists
中
Maven包装器插件
在一个简单的Spring Boot项目中进行自动安装
首先,我们需要进入项目的主文件夹并运行以下命令:
mvn -N io.takari:maven:wrapper
我们还可以指定Maven的版本:
mvn -N io.takari:maven:wrapper -Dmaven=3.5.2
选项-N表示–非递归,因此包装器将只应用于当前目录的主项目,而不应用于任何子模块
资料来源1(进一步阅读):你的答案非常有用。我查看了maven包装器文档。我使用了mvn
命令进行maven操作,尽管我可以使用/mvnw
进行相同的操作。谢谢你的回答。你能解释一下这是什么时候生成的吗,比如你最初创建项目的时候?当你你对你的pom做了一些更改,比如添加删除依赖项/插件?还有,你是否应该添加/提交mvnw.cmd文件?当然可以。它允许你快速运行你的maven构建,而不需要额外安装maven或让它在PATH上运行。非常感谢你的回答,这非常有帮助。你能告诉我们一些maven se的可移植性吗当我们以这种方式工作时,是否需要文件?Saludos,再次感谢。这并没有回答OP问题,它只是建议了一个替代方法maven包装器的基本思想是为该项目声明正确的maven版本。另外一个好处是避免了手动安装maven的需要。您的方法不仅没有解决版本问题lem,但还需要一个本地安装的工具。还要注意的是,这会将用户自己的本地Maven存储库装载到docker实例中。通常它以root运行,因此Docked Maven实例编写的任何内容在Linux下都归root所有。这不一定是需要的。我发现do可以访问一个正确安装的nexus实例构建实例不那么痛苦,特别是当您需要可复制的构建时。(继续)老派的Jenkins设置和思维方式导致了这种情况。现代CI/CD工具的作用恰恰相反:你只需选择一个构建容器。但这只是我的观点。我并不反对投票,因为答案可能会有帮助,但它完全没有抓住OP问题的重点,你不能只引入Docker这样的复杂工具甚至没有解释它是什么。也许你应该提到这部分文字是从
mvn -N io.takari:maven:wrapper -Dmaven=3.5.2