我刚开始使用Maven,并被告知在特定目录中进行mvn安装。

mvn安装到底做什么?

我认为它会在当前文件夹中查找pom.xml,并开始按照该文件中指定的指示执行。对吗?


你看过Maven文档吗,比如Maven安装插件文档?

果壳版本:它将构建项目并将其安装在本地存储库中。


它将运行与默认生命周期的任何阶段相关的所有配置插件的所有目标,直到“安装”阶段:

https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Lifecycle_Reference


您可能已经知道,Maven是Apache提供的构建自动化工具,它的功能不仅仅是依赖项管理。我们可以让它成为Ant和Makefile的对等体,后者可以下载所需的所有依赖项。

在mvn安装中,它根据超级POM .xml(根POM)下所有子项目上的项目配置POM .xml构建依赖树,并在用户文件夹下名为.m2的目录中下载/编译所有所需的组件。这些依赖关系必须得到解决,才能正确地构建项目,mvn install是一个可以下载大部分依赖关系的实用程序。

此外,Maven中还有其他utils,如dependency:resolve,可以在任何特定情况下单独使用。mvn的构建生命周期如下:生命周期绑定

进程资源 编译 process-test-resources 任意 测验 包 安装 部署

这个mvn的测试阶段可以通过使用-DskipTests=true来忽略。


-DskipTests=true是- ddmen .test.skip=true的简写形式

在。m2文件夹中的settings .xml中进行更改。你可以使用链接到本地回购,这样罐子一旦下载不应该下载一遍又一遍。

<url>file://C:/Users/admin/.m2/repository</url>
 </repository>

install:install目标由«Apache Maven install Plugin»提供:

Apache Maven Install Plugin The Install Plugin is used during the install phase to add artifact(s) to the local repository. The Install Plugin uses the information in the POM (groupId, artifactId, version) to determine the proper location for the artifact within the local repository. The local repository is the local cache where all artifacts needed for the build are stored. By default, it is located within the user's home directory (~/.m2/repository) but the location can be configured in ~/.m2/settings.xml using the <localRepository> element. — Apache Maven Install Plugin - Introduction.

话虽如此,确切的目标目的是:

install:install用于自动安装项目的主要工件(JAR、WAR或EAR)、它的POM和任何由特定项目产生的附加工件(源代码、javadoc等)。 - Apache Maven安装插件-简介。

有关目标的更多详细信息,请参阅Apache Maven Install Plugin - Install: Install页面。

有关构建生命周期的其他详细信息以及目标在构建生命周期中的位置,请参考Maven -构建生命周期介绍页面。


简短的回答

mvn install 将pom中指定的所有工件(依赖项)添加到本地存储库(从远程源)。


MVN安装的主要任务是

1)下载依赖项

2)构建项目

而job 1现在由intellij这样的id负责(他们在POM下载任何依赖项)

MVN安装现在主要用于作业2。


在maven构建生命周期的任何阶段,都会执行之前的所有目标。

例如:mvn安装将调用mvn验证,mvn编译,mvn测试,mvn包等。


重要的是要指出安装和安装:安装是不同的东西,安装是一个阶段,在这个阶段,maven做的不仅仅是将当前项目模块工件安装到本地存储库,它首先检查远程存储库。另一方面,install:install是一个目标,它只是构建你当前的项目,并将所有的构件安装到本地存储库(例如到.m2目录)。


一般来说,我们应该使用mvn软件包而不是mvn安装,我在任何地方都看到这个错误

Mvn安装将生成的jar从目标复制到.m2存储库,这可能会在未来给开发人员带来一些问题

根据我7年多的经验,我建议开发人员使用mvn包而不是mvn安装